0

「xlwings_0.3.4」を使用してExcel .xltmファイルを開いて再度保存し、VBAモジュールが保持されていることを確認する簡単なテストを試みました。私はそれを働かせることができませんでした。

保存ステップでファイル拡張子を指定すると、ファイルは .xlsx ファイルとして保存されます。モジュールは引き継がれますが、拡張子の変更により、有効な VBA モジュールとして認識されません。ファイル拡張子を指定しない場合、自動的に .xlsx として保存されます。

WB=xlwings.Workbook('template.xltm')
WB.save('outfile')
WB.close()

これにより、xlsx ファイルが生成されます。

ファイルを xlsm に設定しようとすると、エラーが発生します。

WB.save('outfile.xlsm')
WB.close()
xl_workbook.SaveAs(path)

エラーが発生します:

xl_workbook.SaveAs(path)
File "<COMObject Open>", line 7, in SaveAs
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft          Excel', u'This extension can not be used with the selected file type. Change the   file extension in the File name text box or select a different file type by changing the Save as type.', u'xlmain11.chm', 0, -2146827284), None)

これは、 によって返されるアプリケーション オブジェクトに固有のもののようですGetActiveObject('Excel.Application')

スイッチはありますか (openpyxl のスイッチのようなもの'keep_VBA=True'ですか?)、または xlwings で xlsm ファイルを保存することはできませんか?

4

1 に答える 1

1

あなたは何をしようとしていxl_workbook.SaveAs(path)ますか?

以下の作品:

>>> from xlwings import Workbook
>>> wb = Workbook(r'C:\full\path\to\file.xlsm')
>>> wb.save('new_name.xlsm')

保存時に完全な名前を指定しないと、現在 (v0.3.4) デフォルトの Excel ディレクトリに保存されます。これはおそらく、現在の Python 作業ディレクトリになるように改善して、新しいファイルでの動作と一致させる必要があります。

ワークブックを新しい名前で保存した後、wb上記はまだ古いファイルを参照しているためwb.close()、新しいファイルには影響しないことに注意してください。これも改善してWorkbook.save()、新しい Workbook オブジェクトを返すようにする必要があります。これらの改善点については、GitHub ページで問題を公開します。

于 2015-04-23T09:59:41.290 に答える