gpt4 book ai didi

python - 无法从 Python 迭代 VBA 宏

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:52 24 4
gpt4 key购买 nike

我正在结合使用 VBA 和 Python。

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

import random
from openpyxl import load_workbook
import os, os.path, win32com.client

wbi = load_workbook('Input.xlsm')
wsi = wbi.get_active_sheet()
wbo = load_workbook('Output.xlsx')
wso = wbo.get_active_sheet()

def run_macro(fName, macName, path=os.getcwd()):
"""
pre: fName is the name of a valid Excel file with macro macName
post: fName!macName is run, fName saved and closed
"""
fName = os.path.join(path, fName)
xlApp = win32com.client.Dispatch("Excel.Application")
fTest = xlApp.Workbooks.Open(fName)
macName = fTest.Name + '!' + macName
xlApp.Run(macName)
fTest.Close(1)
xlApp.Quit()
xlApp = None

def IBP():
ibp = wsi.cell('G12')
ibpv = random.randint(0,45)
ibp.value = ibpv
return ibp.value

def BP10():
bp10 = wsi.cell('G13')
bpv10 = random.randint(30,50)
bp10.value = bpv10
return bp10.value

for n in range(6):
IBP()
print IBP()
BP10()
run_macro('Input.xlsm','macro1')
wbo.save('Output.xlsx')

我认为错误出在 run_macro('Input.xlsm','macro1') - 它无法迭代。

输出:

Qt: Untested Windows version 6.2 detected!
35
4
Traceback (most recent call last):
File "C:\Users\User\Desktop\Python Exp\Pr 1.py", line 77, in <module>
run_macro('Input.xlsm','macro1')
File "C:\Users\User\Desktop\Python Exp\Pr 1.py", line 18, in run_macro
fTest = xlApp.Workbooks.Open(fName)
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 522, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: Excel.Application.Workbooks

我做错了什么?

最佳答案

我不确定这是否有帮助,但您可以尝试提前绑定(bind)。运行此脚本,然后再试一次:

import win32com.client

xl = win32com.client.gencache.EnsureDispatch ("Excel.Application")
print xl.__module__

如果这不起作用,您始终可以像这样挂接到 Excel 以返回到后期绑定(bind):

xl = win32com.client.dynamic.Dispatch("Excel.Application")

或者简单地删除这个文件夹:C:\Python27\Lib\site-packages\win32com\gen_py\00020813-0000-0000-C000-000000000046x0x1x7

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

祝你好运

迈克

关于python - 无法从 Python 迭代 VBA 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com