无法从Python迭代VBA宏

无法从Python迭代VBA宏,python,vba,excel,win32com,Python,Vba,Excel,Win32com,我将VBA与Python结合使用 我导入了模块OS,并用于使用excel-openpyxl。当它从Excel中迭代用于运行VBA宏的函数时,就会出现问题 随机导入 从openpyxl导入加载工作簿 导入操作系统、os.path、win32com.client wbi=加载工作簿('Input.xlsm') wsi=wbi.get\u active\u sheet() wbo=load_工作簿('Output.xlsx') wso=wbo.get_active_sheet() def run_宏(

我将VBA与Python结合使用

我导入了模块OS,并用于使用excel-openpyxl。当它从Excel中迭代用于运行VBA宏的函数时,就会出现问题

随机导入
从openpyxl导入加载工作簿
导入操作系统、os.path、win32com.client
wbi=加载工作簿('Input.xlsm')
wsi=wbi.get\u active\u sheet()
wbo=load_工作簿('Output.xlsx')
wso=wbo.get_active_sheet()
def run_宏(fName,macName,path=os.getcwd()):
"""    
pre:fName是具有宏macName的有效Excel文件的名称
post:fName!macName已运行,fName已保存并关闭
"""
fName=os.path.join(路径,fName)
xlApp=win32com.client.Dispatch(“Excel.Application”)
fTest=xlApp.Workbooks.Open(fName)
macName=fTest.Name+'!'+macName
xlApp.Run(macName)
fTest.关闭(1)
xlApp.Quit()
xlApp=无
def IBP():
ibp=wsi.cell('G12')
ibpv=random.randint(0,45)
ibp.value=ibpv
返回ibp.value
def BP10():
bp10=wsi.cell('G13')
bpv10=random.randint(30,50)
bp10.value=bpv10
返回bp10.0值
对于范围(6)内的n:
IBP()
打印IBP()
BP10()
运行_宏('Input.xlsm','macro1')
wbo.save('Output.xlsx')
我认为错误在
run_macro('Input.xlsm','macro1')
中-它无法迭代

输出:

Qt:检测到未经测试的Windows 6.2版!
35
4.
回溯(最近一次呼叫最后一次):
文件“C:\Users\User\Desktop\Python Exp\Pr 1.py”,第77行,在
运行_宏('Input.xlsm','macro1')
文件“C:\Users\User\Desktop\Python Exp\Pr 1.py”,第18行,在run\u宏中
fTest=xlApp.Workbooks.Open(fName)
文件“C:\Python27\lib\site packages\win32com\client\dynamic.py”,第522行,位于\uuu getattr中__
提高属性错误(“%s.%s%”(self.\u用户名,attr))
属性错误:Excel.Application.Workbooks

我做错了什么?

我不确定这是否有帮助,但您可以尝试早期绑定。运行此脚本,然后重试您的脚本:

import win32com.client

xl = win32com.client.gencache.EnsureDispatch ("Excel.Application")
print xl.__module__
如果这不起作用,您可以通过如下方式挂接Excel返回后期绑定:

xl = win32com.client.dynamic.Dispatch("Excel.Application")
或者只需删除此文件夹:
C:\Python27\Lib\site packages\win32com\gen_py\00020813-0000-0000-C000-0000000000 46x0x1x7

从错误消息中,您的问题似乎出现在
wb=xlApp.Workbooks.Open(fname)
行上。如果到excelcom服务器的Python钩子工作正常,那么该行不会引发异常。我看不出发生异常的代码有任何错误。有时早期绑定在这种情况下会有所帮助

祝你好运


迈克

没人能解决这个问题?这对我来说非常重要-请花点时间帮助我-我是编程新手-这是我的第一个程序我现在不使用Python。但是看一下这个错误,似乎您在定义文件名时遇到了错误,您可以尝试这样定义文件路径并查看它是否工作:
c:\fullpath\test.xls
然后您可以尝试
DispatchEx
以确保始终获得Excel的新实例。谢谢您的帮助-但它以前没有工作过,xl应用程序实例没有工作簿属性。但我不记得我做了什么来修复它。让我学习一下。