python兼容VBA的用法详解
程序员文章站
2023-12-28 21:06:22
一、简介有时我们需要向含有vba代码的excel写入数据,但又不能影响正常的vba代码执行,起初我使用python的openpyxl模块中函数将数据写入xlsm文件中,写入数据后发现执行vba代码的按...
一、简介
有时我们需要向含有vba代码的excel写入数据,但又不能影响正常的vba代码执行,起初我使用python的openpyxl模块中函数将数据写入xlsm文件中,写入数据后发现执行vba代码的按钮消失不见了,于是通过查找原因发现是由于openpyxl对vba支持并不友好,而对vba支持友好是xlwings模块。
二、简单介绍下xlwings模块
1、读取excel中数据
读取需注意点:
默认情况下,带有数字的单元格被读取为float,带有日期单元格被读取为datetime.datetime,空单元格转化为none;数据读取可以通过option操作指定格式读取。
import xlwings as xw import os #创建app应用 app=xw.app(visible=true,add_book=false) #visible表示程序运行时是否可见excel,true表示可见,false表示不可见;add_book表示是否要新建工作簿 file = "数据写入v1.xlsm" wb=app.books.open(file) #打开指定文件 ws = wb.sheets["sheet1"] #工作表引用 #ws.activate() temp_value = ws["b2"].value #默认读取b2的值,为浮点型 print(type(temp_value)) print(temp_value) temp_n = ws["b3"].value #默认读取b3的值,这里未空值默认应显示none print(type(temp_n)) print(temp_n) temp_value1 = ws["b2"].options(numbers=int).value #将b2的设置为整数 print(type(temp_value1)) print(temp_value1)
#运行结果
<class 'float'>
100.0
<class 'nonetype'>
none
<class 'int'>
100
>>>
2、另一种取值单元格值得方式
import xlwings as xw import os app=xw.app(visible=true,add_book=false) file = "数据写入v1.xlsm" wb=app.books.open(file) #打开指定文件 ws = wb.sheets["sheet1"] print(ws.range('b2').value) #另一种方式读取b2的值 #运行结果 100.0
三、将数据写入excel
import xlwings as xw import os #创建app应用 app=xw.app(visible=true,add_book=false) file = "数据写入v1.xlsm" wb=app.books.open(file) #打开指定文件 #工作表引用 ws = wb.sheets["sheet1"] a = 6799 b = 2345 c = 1000 info = ws.used_range #print(info) nrows = info.last_cell.row #获取sheet表中最大行 print(nrows) if ws['b'+str(nrows)]==none: ws['b'+str(int(nrows)-1)].value=a ws['c'+str(int(nrows)-1)].value=b ws['d'+str(int(nrows)-1)].value=c else: ws['b'+str(int(nrows)+1)].value=a ws['c'+str(int(nrows)+1)].value=b ws['d'+str(int(nrows)+1)].value=c wb.save() #保存数据 wb.close() #关闭工作簿 app.quit()
写入后
到此这篇关于python兼容vba的用法详解的文章就介绍到这了,更多相关python兼容vba的用法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!