前提・実現したいこと
pythonから入力した数値を元にエクセル上で計算を行う。
エクセルのシートを開いた状態では入力できないので、エクセルを
閉じた状態で計算を行い、結果を読み取りたいです。
発生している問題・エラーメッセージ
pythonからエクセルに数値を入力し、マクロで計算を実行させようとすると以下のエラーが出ます。
Traceback (most recent call last): File "C:\Temp\python\macro_test\macro_test3.py", line 40, in <module> app.Application.Run(excel_path + '!test()') File "<COMObject <unknown>>", line 8, in Run File "C:\Temp\anaconda\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_ result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args) pywintypes.com_error: (-2147352567, '例外が発生しました。', (0, 'Microsoft Excel', "マクロ 'C:\Temp\python\macro_test\Book1.xlsm!test()' を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性 があります。", 'xlmain11.chm', 0, -2146827284), None)
該当のソースコード
python3.8.3
python3.8.3
1import win32com.client 2import xlwings 3import pprint 4import os 5import openpyxl 6from openpyxl import load_workbook 7import sys 8 9cwd = os.getcwd() 10file_name = "Book1.xlsm" 11excel_path = '%s\%s'%(cwd, file_name) 12print("excel_path=", excel_path) 13wb = openpyxl.load_workbook(excel_path, keep_vba=True) 14print(type(wb)) 15print(wb.sheetnames) 16sheet = wb['Sheet1'] 17result = sheet.cell(row=2, column=1).value 18calc = sheet.cell(row=2, column=2).value 19print("result=", result) 20print("calc=", calc) 21sheet.cell(row=2, column=3, value= 1) 22plus = sheet.cell(row=2, column=3).value 23print("result=", result) 24print("plus=", plus) 25wb.save(excel_path) 26app = win32com.client.Dispatch('Excel.Application') 27app.Visible = False 28app.DisplayAlerts = False 29macro = app.Workbooks.Open(Filename='%s'%(excel_path)) 30app.Application.Run(excel_path + '!test()') 31calc2 = sheet.cell(row=2, column=2).value 32print("calc2=", calc2) 33macro.SaveAs(excel_path) 34macro.Close() 35Excel.Application.Quit()
マクロ
Sub test() Dim result As Single Dim calc As Single Dim i As Single result = Cells(2, 1).Value i = Cells(2, 3).Value calc = result + i Cells(2, 2) = calc End Sub
試したこと
pythonで上記のコードを使ってエクセルに数値を入力することはできましたが、
エクセルを閉じた状態ではマクロを有効にできないのでエラーが出ます。
補足情報(FW/ツールのバージョンなど)
python3.8.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/24 08:52