2017-03-09 8 views
-1

これは私のコードです。私はxlxsをコメントで保存しようとすると失敗しました。どのようにして再度保存するかを知ることができます。openpyxlを使用してxlxs​​ファイルをコメントで2回保存できません

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が予期せずNoneに設定されているようです。

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が2回保存に失敗することがわかった – Sam

答えて

1

サンプルを保存するためにコードを使用しました。.xlsxファイルです。それは何の問題もなく保存されました。
あなたの中にmacroがありますか.xlsxファイルですか? はい場合は、マクロでのxlsxファイルを開くことが

model = load_workbook(filename, keep_vba=True) 

を使用して有効なマクロとopenpyxl使用方法の詳細についてはhereを参照してください。

また、元のファイルを上書きして別のファイル名に保存して、正常に動作することを確認してください。

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

希望します。

+0

'keep_vab = True'を使用する場合。ファイルを2回保存した後、ファイルが破損する – Sam

+0

なぜファイルを2回保存する必要がありますか?最後に一度だけ保存することができます。最初に保存した後でxlsxファイルを変更している場合を除きます。その場合は、もう一度開いてから保存する必要があります。 xlsxオブジェクトには、最初に保存する前に元の情報があります。 –

+0

私はもう一度閉じることを選択します。 – Sam

関連する問題