2017-08-28 69 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

根據當前代碼的複雜程度,您可以選擇完全重寫還是涉及更多包的髒解決方法(但要避免重寫當前代碼)