我有一个现有的Excel工作簿Workbook_A
。我正在创建一个相同的工作簿Workbook_B
,然后在新工作簿的某些单元格中插入一些值。
我正在做的简化版本:
from xlrd import open_workbook
from xlutils.copy import copy
rb = open_workbook(Workbook_A)
wb = copy(rb)
s = wb.get_sheet(0)
s.write(row, col, value)
wb.save(Workbook_B)
Workbook_A
此处可以是xlsx
文件,但我必须将其另存为xls
文件Workbook_B.xls
。否则文件会损坏,无法打开。
有没有办法解决这个问题?我可以将xlutils
与xlsx
一起使用,或者该模块是否与该Excel格式兼容?
我不是第一个遇到this problem的人,但我无法找到解决办法。
答案 0 :(得分:2)
由于xlutils
依赖xlrd
(读取文件)和xlwt
(写文件),因此save
xlutils
函数实际使用xlwt
。
.xlsx
是来自.xls
的更新且完全不同的文件格式(基本上是压缩的xml文件)。虽然xlrd
已升级为读取.xlsx
个文件,但xlwt
尚未升级为编写此类文件(does xlwt support xlsx Format)。
自xlwt
only writes older Excel (.xls
) files以来,传递.xlsx扩展程序并不会改变事物。基础格式仍为.xls
(并且被MS Excel视为已损坏,因为它依赖于扩展而不是内容来决定如何打开文件)
所以,使用openpyxl
做你想做的事情(完全放弃xlutils
,xlrd
,xlwt
,因为你不关心遗产{{1格式化),或使用当前流程保存为临时.xls
文件,然后使用.xls
将其读回来并写回xlrd
。
根据当前代码的复杂程度,您可以选择完全重写或涉及更多软件包的脏解决方法(但避免重写当前代码)