xlutils 仅适用于 xls,不适用于 xlsx?

xlutils only works on xls, not xlsx?

我有一个现有的 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的人,但我找不到解决方法。

由于xlutils依赖xlrd(读取文件)和xlwt(写入文件),因此,xlutilssave函数实际使用 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,因为你不关心遗留问题 .xls 格式),或使用当前进程保存为临时 .xls 文件,然后使用 xlrd 读回 sheet 并写回 openpyxl.

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