我有一个现有的 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 的人,但我找不到修复方法。
最佳答案
如xlutils
依赖xlrd
(读取文件)和 xlwt
(写入文件),因此,save
xlutils
的功能实际使用xlwt
.
.xlsx
是一种较新且完全不同的文件格式(基本上是压缩的 xml 文件),来自 .xls
。而xlrd
已升级为 .xlsx
文件,xlwt
未升级为写入此类文件 ( does xlwt support xlsx Format )。
自 xlwt
only writes older Excel ( .xls
) files ,传递 .xlsx 扩展名不会改变任何事情。底层格式仍然是.xls
(并且被 MS Excel 视为损坏,因为它依赖扩展名而不是内容来决定如何打开文件)
所以,要么使用 openpyxl
做你想做的事(完全删除 xlutils
、 xlrd
、 xlwt
因为你不关心旧版 .xls
格式),或另存为临时 .xls
使用当前进程创建文件,然后使用 xlrd
读回表并写回openpyxl
.
根据当前代码的复杂性,您可以选择完全重写或涉及更多包的肮脏解决方法(但避免重写当前代码)
关于python - xlutils 只适用于 xls,不适用于 xlsx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45915266/