openpyxl和xlwingss使用对比
一开始搜到的是openpyxl用法,满心欢喜的照着教程编写代码,但是在满足普通需求后,发现保存文件时会将WPS中的宏给清除了,这没法做啊,接着在往上搜解决办法,只找到说可以保留VBA宏的方法:
openpyxl.load_workbook(file, keep_vba=True)
但是在WPS用的JS写的宏,这个方法不可行,只好另寻他法。
终于找到wlings支持保存Excel文件时保存宏,下面记录下两种方法的简单使用和对比。
总结:
情景/库 | openpyxl |
xlwings |
---|---|---|
读取.xls |
不支持 | 可以读取 |
保存.xls |
可以保存,但是提示文件扩展名不匹配,可以看到原始数据 | 可以保存,但是提示文件扩展名不匹配,可以看到原始数据 |
读取.xlsx |
可以带有样式读取 | 可以带有样式读取 |
保存.xlsx |
可以带有样式保存 | 可以带有样式保存 |
读取.xlsm |
可以读取,但没有宏 | 可以读取包含宏的表格 |
保存.xlsm |
保存后打不开,存成 .xls想 格式宏丢失 |
存储后宏还在 |
增删行和列 | 支持 | 支持 |
使用建议 | 只操作.xlsx文件可以考虑,带宏不建议 | 目前感觉使用比较方便 |
使用
一、openpyxl
import openpyxl # 使用前需要安装 命令:pip3 install openpyxl
wb = openpyxl.load_workbook("test.xlsm") # 打开文件
ws = wb[0] # 打开具体的 sheet,可以是数字或者名字
# 获取 sheet 表中最大行数
ws.max_row
# 获取 sheet 表中最大列数
ws.max_column
# 获取具体单元格
cell = ws.cell(row, 10)
# 获取单元格中的值
cell.value
# 修改单元格中的值
cell.value = 0
# 保存文件
wb.save(file)
二、xlwings
# 打开并显示 Excel 客户端,如果不想显示可将 visible 置为 False。
app = xw.App(visible=True, add_book=False)
# 打开文件
wb = app.books.open("test.xlsm")
# 获取指定 sheet,可以是数字或者名称
wb.sheets[fund]
# 获取指定单元格的值(A1)
ws[0, 0].value
# 修改指定单元格的值(A1)
ws[0, 0].value = 0
# 保存文件
wb.save(file)
# 关闭文件
wb.close()