我需要通过 python 运行 Excel 宏,但总是出现以下错误:
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146788248), None)
Run Code Online (Sandbox Code Playgroud)
在Excel中,它给出了以下错误:
运行时错误 1004:无法运行宏“。宏在此工作簿中可能不可用,或者可能禁用了所有宏。
我的代码如下:
xl=win32.Dispatch("Excel.Application")
wb=xl.Workbooks.Open(Filename="Path+MyExcelFile.xlsm", ReadOnly=1)
xl.Visible = True
time.sleep(1)
ws=wb.Worksheets("Sheet1")
ws.Cells(4,2).Value='Value1'
ws.Cells(5,2).Value='Value2'
ws.Cells(1,8).Value='Bool'
time.sleep(10)
xl.Application.Run("MyExcelFile.xlsm!macroname")
result = ws.Cells(3,10).Value
print result
xl.Application.Quit()
del xl
Run Code Online (Sandbox Code Playgroud)
我通过宏安全启用了所有宏,并且没有为特定工作表定义宏。当然,如果我在 Excel 中手动运行宏,它就可以正常工作
这对我来说很好。只需更改宏的路径和名称即可。
from __future__ import print_function
import unittest
import os.path
import win32com.client
class ExcelMacro(unittest.TestCase):
def test_excel_macro(self):
try:
xlApp = win32com.client.DispatchEx('Excel.Application')
xlsPath = os.path.expanduser('C:\\Users\\rshuell001\\Desktop\\Valuation Code Rollover.xlsb')
wb = xlApp.Workbooks.Open(Filename=xlsPath)
xlApp.Run('Macro1')
wb.Save()
xlApp.Quit()
print("Macro ran successfully!")
except:
print("Error found while running the excel macro!")
xlApp.Quit()
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)