无法从Python迭代VBA宏

2024-09-28 20:58:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我将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')-它不能迭代。在

输出:

^{pr2}$

我做错什么了?在


Tags: pathrunimportinputvalueosloadrandom
1条回答
网友
1楼 · 发布于 2024-09-28 20:58:52

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

import win32com.client

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

如果不起作用,您可以通过如下方式挂接到Excel来返回后期绑定:

^{pr2}$

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

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

祝你好运

迈克

相关问题 更多 >