调用一个宏到不同的工作簿中的Python代码

8 浏览
0 Comments

调用一个宏到不同的工作簿中的Python代码

我正在尝试通过使用Python和Excel来自动化一些我需要为报告做的事情,以使我的生活变得更轻松。我创建了一个专门用于宏的Excel工作簿(启用了宏),例如,当我按下ctrl+R时,它会删除我不需要的报告中的任何空格和括号。我的问题是如何打开宏工作簿,然后打开我需要使用宏的其他报告。\n这是我当前的代码:\n

import xlwings as xw
wb = xw.books.open(r'macrofile.xlsb', r'reportthatneedswork.csv')
macroname = wb.macro('MacroName')
macroname()

\n它只打开了宏工作簿,但没有打开其他报告,也没有执行任何操作。

0
0 Comments

问题:如何在Python中调用不同工作簿的宏?

原因:根据所找到的信息,xlwings没有提供一种直接执行外部工作簿宏的方法。最接近的方法是使用win32com提取和移动vb脚本,然后使用xlwings打开并运行宏。然而,对于您的情况来说,这可能有些过于复杂。如果您只是重新编写宏,将其转换为Python代码会更加简单。

解决方法:首先,您可以使用xlwings将宏代码重写为Python代码。然后,您可以使用xlwings的App对象打开不同的工作簿并运行相应的宏。以下是一个示例代码,演示了如何使用xlwings在不同工作簿中调用宏:

import xlwings as xw
def python_macro(wb_path, app):
    wb = app.books.open(wb_path)
    sheet = wb.sheets.active
    # 在此处将宏代码重写为Python代码
    print(sheet.range('A1').value)
with xw.App() as app:    
    # 通过命令行参数传递工作簿路径
    for arg in sys.argv[1:]:
        path = join(os.getcwd(), arg)
        if os.path.isdir(path):
            # 可选择处理更多子目录
            files = [f for f in listdir(path) if isfile(join(path, f))]
            for file in files:
                python_macro(file, app)
        elif os.path.isfile(path):
            python_macro(path, app)

将以上代码保存在与报告文件相同的目录中,并通过以下方式运行它:

python macro.py reportthatneedswork.csv anotherreport.csv report-sub-dir

这样,您就可以在不同的工作簿中调用宏了。

0