2017-03-09 31 views
-1

這是我的代碼。當我嘗試用評論保存xlxs時,它失敗了。我怎麼知道什麼時候再保存。使用openpyxl保存xlxs文件兩次,使用註釋成績

from openpyxl import load_workbook 
import datetime 


filename = u"large_table.xlsx" 

model = load_workbook(filename) 
model.properties.lastPrinted = datetime.datetime.now() 
model.save(filename) 
model.properties.lastPrinted = datetime.datetime.now() 
model.save(filename) 

回溯:看來self.workbook.vba_archive設置爲無意外。

Traceback (most recent call last): 
    File "D:/h32workspace/trunk/event_editor/eric6/model/test_file.py", line 31, in <module> 
    model.save(filename) 
    File "C:\Python27\lib\site-packages\openpyxl\workbook\workbook.py", line 342, in save 
    save_workbook(self, filename) 
    File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 269, in save_workbook 
    writer.save(filename) 
    File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 251, in save 
    self.write_data() 
    File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 81, in write_data 
    self._write_worksheets() 
    File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 214, in _write_worksheets 
    self._write_comment(ws) 
    File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 184, in _write_comment 
    vml = fromstring(self.workbook.vba_archive.read(ws.legacy_drawing)) 
AttributeError: 'NoneType' object has no attribute 'read' 

我試圖用keep_vba=True加載工作簿,但如果未能正確保存文件。保存的文件無法打開。

+0

嘗試使用XlsxWriter:https://pypi.python.org/pypi/XlsxWriter –

+0

從回溯中可以清楚地看到,發佈的代碼不正確:您正在使用XLSM文件,但這些文件並未完全由標準,因爲所有宏觀相關的東西都是黑盒子。 –

+0

@CharlieClark我發現Excel的評論將無法保存兩次 – Sam

回答

1

我用你的代碼保存了一個樣本.xlsx文件。它沒有任何問題保存。
你有沒有任何macro.xlsx文件? 如果是的話,你可能要打開與宏XLSX文件使用

model = load_workbook(filename, keep_vba=True) 

啓用見here關於openpyxl使用與宏細節。

此外,嘗試保存到不同的文件名,而不是嘗試覆蓋原始文件以確保其正常工作。

fileout = "test2.xlsx" 
model.save(fileout) 

希望這會有所幫助。

+0

使用'keep_vab = True'時。保存文件兩次後,文件被破壞 – Sam

+0

爲什麼你需要保存文件兩次?最後只能保存一次。除非在第一次保存後修改xlsx文件。在這種情況下,您需要再次打開並保存。 xlsx對象在首次保存之前具有原始信息。 –

+0

我選擇關閉並再次打開 – Sam