既存の.xlsxファイルを開き、Visual Basicマクロスクリプトを自動サイズコメントに書き込み、マクロを実行してから、ブックを閉じて保存します。win32com.clientを使用してExcel VBマクロを作成して実行します。
私はwin32com.clientにはあまりよく慣れていません。数時間の掘り下げの後、私はVBマクロスクリプトをPythonから書くための良い文書を見つけられませんでした。したがって、私はこれらのスレッドからのフィードバックを使用してスクリプトを縫い合わせ:ここ
https://stackoverflow.com/a/19506287/7547876
https://stackoverflow.com/a/2141981/7547876
は、私が作ってみたコードの大まかな表現です:
import openpyxl, win32com.client as win32, comtypes, comtypes.client
class report:
def __init__(self,name,dpath,inputs,**kw):
self.name=name
self.dpath=dpath
#ommited scripts builds excel report with openpyxl, then saves it
self.xl=win32.gencache.EnsureDispatch('Excel.Application')
self.xl.Visible=False
self.report=self.xl.Workbooks.Open(dpath+'\\'+self.name+'.xlsx')
self.report.Worksheets("Audit Assistant Report").Activate()
self.sheet=self.report.ActiveSheet
self.xlmodule=self.sheet.VBProject.VBComponents.Add(1)
self.excelcode="""Sub FitComments()
'Updateby20140325
Dim xComment As Comment
For Each xComment In Application.ActiveSheet.Comments
xComment.Shape.TextFrame.AutoSize = True
Next
End Sub"""
self.xlmodule.CodeModule.AddFromString(self.excelcode)
self.report.Run(self.name+'.xlsx!Macro_1')
self.report.Close(savechanges=True)
self.xl.Quit()
def main():
#input definitions omitted
report("myreport","C:\\somepath\\",inputs)
if__name__=='__main__':
main()
スクリプトを実行しようとすると、次のトレースバックが生成されます。
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 473, in __getattr__
raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
AttributeError: '<win32com.gen_py.Microsoft Excel 14.0 Object Library._Worksheet instance at 0x229316888>' object has no attribute 'VBProject'
私はPyWin32パッケージをアップデートしようとしましたが、問題ではないと判断しました。
スクリプトを実行して目的の効果が得られるようにするには、スクリプトを変更する必要がありますか?
ご入力いただきありがとうございます。
これで問題は解決しました。 \ com_error:(-2147352567、 '例外が発生しました。'、(0、u'Microsoft Excel '、Visual Basicプロジェクトへのu'Programmaticアクセスは信頼されていません。 'xlmain11.chm'、0、-2146827284)、なし) –
セキュリティ上の理由から、Excelでは、デフォルトでソフトウェアでVBAモジュールを作成することはできません。デフォルト設定を変更する必要があります。 Excel 2010では、 'Developer'タブに行き、' Macro Security'アイコンをクリックし、 'VBAプロジェクトオブジェクトモデルへのアクセスを信頼する'チェックボックスをチェックします。他のバージョンと同様のものでなければなりません。 – xidgel
非常に感謝しています。私のプログラムは適切なサイズのコメントを書いて、VBAスクリプトが失敗した場合にユーザがそれらのステップに従うべきであることを示唆するメッセージボックスを提供するようになりました。 –