2017-08-28 30 views
1

我有一个现有的Excel工作簿,Workbook_A。我正在创建一个完全相同的工作簿,Workbook_B,然后在新工作簿中的一些单元格中插入一些值。xlutils只适用于xls,不适用于xlsx?

的我在做什么的简化版本:

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第一个,但我不能找到一个解决。

回答

2

xlsutils依靠xlrd(读取文件)和xlwt(写入文件)包。因此,save功能使用xlwt

坏消息是,同时xlrd已经升级,新的,完全不同的.xlsx文件(基本上压缩XML文件)的工作,xlwt不是从https://xlwt.readthedocs.io/en/latest/

升级到 这样的文件( does xlwt support xlsx Format

xlwt是写数据和较旧的Excel文件格式信息库(即表:.xls)

因此,传递.xlsx扩展名不会改变任何事情。底层格式仍然.xls(并通过MS Excel中被视为腐败,因为它依赖于扩展,而不是内容,决定如何打开文件)

所以,要么使用openpyxl做你想做什么(降xlutil,xlrd,xlwt,因为您不关心传统的.xls格式),或者使用您当前的进程将其保存为临时.xls文件,然后使用xlrd将其读回到工作表并将其写回openpyxl

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