xlutils只适用于xls,而不适用于xlsx?

时间:2017-08-28 08:58:32

标签: python excel python-3.x xlutils

我有一个现有的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。否则文件会损坏,无法打开。

有没有办法解决这个问题?我可以将xlutilsxlsx一起使用,或者该模块是否与该Excel格式兼容?

openpyxl the solution?

我不是第一个遇到this problem的人,但我无法找到解决办法。

1 个答案:

答案 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做你想做的事情(完全放弃xlutilsxlrdxlwt,因为你不关心遗产{{1格式化),或使用当前流程保存为临时.xls文件,然后使用.xls将其读回来并写​​回xlrd

根据当前代码的复杂程度,您可以选择完全重写或涉及更多软件包的脏解决方法(但避免重写当前代码)