2

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

有没有办法解决这个问题?我可以使用xlutilswithxlsx还是该模块与该 Excel 格式不兼容?

openpyxl解决方案吗?

我不是第一个遇到这个问题的人,但我找不到解决办法。

4

1 回答 1

3

由于xlutils依赖于xlrd(读取文件)和xlwt(写入文件),因此,save实际xlutils使用xlwt.

.xlsx是一种较新且完全不同的文件格式(基本上是压缩的 xml 文件).xls。虽然xlrd已升级为读取.xlsx文件,xlwt但未升级为写入此类文件(xlwt 是否支持 xlsx 格式)。

由于xlwt 只写入较旧的 Excel ( .xls) 文件,因此传递 .xlsx 扩展名不会改变任何事情。基础格式仍然存在.xls(并且被 MS Excel 视为损坏,因为它依赖扩展名而不是内容来决定如何打开文件)

因此,要么使用openpyxl做你想做的事(完全放弃xlutils, xlrdxlwt因为你不关心遗留格式),或者使用当前进程.xls保存为临时文件,然后使用读回表并写回..xlsxlrdopenpyxl

根据您当前代码的复杂性,您可以在完全重写或涉及更多包的肮脏解决方法之间进行选择(但避免重写当前代码)

于 2017-08-28T09:19:24.383 回答