2017-03-09 93 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