2022-04-26 python excel操作
2022-04-26 本文已影响0人
江江江123
openpyxl
遍历每行
workbook= openpyxl.load_workbook(file2_path)
sheet = workbook['sheetname']
for row in sheet.iter_rows():
print(row[1])
直接选中,openpyxl默认从(1,1)开始不是(0,0)
sheet.cell(row=row, column=column).value
保存并推出
workbook.save(filename=filename)
workbook.close()
以上是一些常规操作,下面说下vba的一些坑
1.关于保存,如果是带有vba编程的xlsm文件直接保存后会打不开,所以加载时要带参数
workbook = openpyxl.load_workbook(filename=filename, keep_vba=True)
2.关于读取函数值
有时候我们想要读取的时函数的值,但是一般都到的是类型A1+A2的函数,想要读值同样需要加载时带参
workbook = openpyxl.load_workbook(filename=filename, keep_vba=True, data_only=True)
备注:该模式下不要做修改保存操作,不然会将excel中的函数全部变成值。
最好将值存在二维数组中,关闭后,重新打开一个带函数的workbook编辑保存
3.关于执行vba
网上百分之90的文章都写了如下操作,并备注了只能在windows下执行
xls = win32com.client.Dispatch("Excel.Application")
xls.Application.visible = False
####调用vba程序。需要安装win32com库
try:
book = xls.workbooks.Open(filename) ##存储vba代码的文件
# xls.Application.Run("excelsheet.xlsm!modulename.macroname")
url = module_name + "." + method_name
xls.Application.Run(url)
##开始调用vba宏
# status = xls.Application.ExecuteExcel4Macro('sbm结果计算宏文件1.xlsm!按钮1_Click()')
# print(status)
book.Close(SaveChanges=True)
except Exception as ex:
template = "An exception of type {0} occurred. Arguments:\n{1!r}"
message = template.format(type(ex).__name__, ex.args)
print(message)
xls.Application.Quit()
说下这个方法的原理及坑:
原理:打开一个excel,在默认sheet执行vba方法,vba方法为 模块名+'.'+方法名,执行结束后保存退出
坑:
1.首先你的电脑得有office,如果是wps你会无法执行vba,就算你充了wps的企业会员,或者像我一样网上下了wps的vba插件(由于没有规范求解的引用,从有office的电脑拷贝了引用安装),但是最后wps vba执行规范求解和office的结果是不一样。不得不说wps在块确实没做好,无奈之下卸载wps,安装了office2019
2.由于上面的方法执行时即使你用了 book.Worksheets('sheetname'),也不会去你想要的sheet目录去执行,它就在excel默认sheet的目录执行,如果要在不同得sheet执行,就要不停得切换sheet保存关闭,执行
openyxl切换默认sheet
workbook.active = workbook['sheetname']
3.在运行win32执行vba代码的时候。不要打开office,因为执行Run的时候,你打开的office就会运行宏,强行关闭office,python代码也会报错
最后分享一点编码心得:
一步到位的编码固然可喜可贺,但往往复杂的逻辑需要我们一步步完成。