本文已参与「新人创作礼」活动,一起开启掘金创作之路。
结论
- 优先选择 xlwings 库。
- 直接复制一整张工作表很完美。不像 openpyxl 存在一些特殊格式不能复制过去的情况(如公式 + 颜色 + 下拉列表)。
- xls/xlsx 格式 Excel 文档均支持,但注意:office excel文档支持ok,wps excel 文档存在不支持情况!(太欺负国软了,气人)
- 源码、素材文档,参见gitee
excel库比对
在此借用一张网络上知乎Python小二水印带图片,如有侵权请告知,立马删
pycharm 导入库
源码
import xlwings as xw
def readWrite_xlwings():
# 注意:wps保存的文件可能存在无法打开问题!
# visible=None: excel实例是否可见
# add_book=True: 是否打开新的Excel程序,是否打开新的excel窗口)
app = xw.App(visible=True, add_book=False)
# 关闭屏幕更新,可加快宏的执行速度,但看不到Excel数据变化过程
# app.screen_updating = False
wb = app.books.open(r"D:\cuncaojin\Desktop\feng\表格.xls")
ws0 = wb.sheets["总表"]
ws = wb.sheets['分表']
print(ws.range('A1').value)
# 行数、列数正确值
rng = ws0.range('A1').expand('table')
nrows = rng.rows.count
ncols = rng.columns.count
print(str(nrows) + ", " + str(ncols))
for i in range(2, nrows + 1):
# 编号
number = ws0.range(i, 1).value
print(number)
# 以编号名作为新工作表名
copy_sheet = ws.copy(name=str(number))
# ws0表i行数据给新表赋值
copy_sheet['B2'].value = ws0.range(i, 2).value
copy_sheet['B4'].value = ws0.range(i, 1).value
copy_sheet['B6'].value = ws0.range(i, 6).value
copy_sheet['B7'].value = ws0.range(i, 8).value
copy_sheet['B10'].value = ws0.range(i, 9).value
copy_sheet['B11'].value = ws0.range(i, 10).value
copy_sheet['D6'].value = ws0.range(i, 7).value
copy_sheet['D7'].value = ws0.range(i, 11).value
wb.save()
# 关闭最后第一个打开的excel文件
wb.close()
# 退出excel程序,
app.quit()
# # 通过杀掉进程强制Excel app退出
# # app.kill()
if __name__ == '__main__':
readWrite_xlwings()