2012-10-05 66 views
1

我有一些代碼可以打開一個帶有xlrd的Excel工作簿,將它複製爲xlutils,然後用xlwt更新它,然後將其寫回到另一個文件。使用xlutils複製XLS時保留命名範圍

生成的工作簿缺少原來存在的所有命名範圍。我100%確定指定的範圍存在於原始範圍中,因爲我實際上是在讀取它們(從xlrd對象,在複製之前),並根據它們更新我的更新。

假設這是使用xlutils.copy.copy的自然效果,xlwt有什麼方法可以讓我重新創建從同一工作簿的xlrd版本讀取的命名範圍?文檔(至少,我能找到)很少。

這裏是一個Python會話,顯示問題:

>>> from xlrd import open_workbook 
>>> wb = open_workbook('sc_auction_template.xls', formatting_info=True) 
>>> print len(wb.name_obj_list) # see, there are named ranges 
9 
>>> from xlutils.copy import copy 
>>> wb2 = copy(wb) 
>>> wb2.save('test.xls') 
>>> wb = open_workbook('test.xls') 
>>> print len(wb.name_obj_list) # but now there are none! 
0 
+0

什麼是「formatting_info = True」?你已經把它放在第一個開放的,但不是第二個......爲什麼? – Antoni4040

+0

需要xlrd從電子表格中讀取單元格格式信息。這是因爲我剪下了這段代碼並從實際運行的代碼中編輯了下來。我認爲這與命名的範圍問題沒有關係(除了它證明我必須爲了將單元格格式從電子表格移動到電子表格而遇到一些麻煩)。 –

回答

0

就目前來看,答案是不幸沒有xlwt不支持寫入名稱。也許有一天,但我不期待它很快。

據我所知,以.xls文件編寫名稱的唯一方法是自動運行一個應用程序的實例,例如Excel本身可以在Windows上使用pywin32pywinauto或某種風格的Visual Basic,等等。我相信,如果你不能使用Excel,你也可以使用類似的方法來編寫OpenOffice.org腳本。