Python 从不同的Excel文件运行Excel宏

Python 从不同的Excel文件运行Excel宏,python,win32com,Python,Win32com,我知道关于这个话题已经有很多问题了,但我想不出一个适合我的解决方案 我想运行存储在“xlsm”文件中的Excel宏,但我需要在不同的Excel文件(“xlsx”)上运行它 每当我尝试下面的代码时,都会收到一条错误消息,说找不到宏,所以我想问题与路径有关 这就是我所拥有的: import win32com.client import os try: excel = win32com.client.Dispatch('Excel.Application') excel_path =

我知道关于这个话题已经有很多问题了,但我想不出一个适合我的解决方案

我想运行存储在“xlsm”文件中的Excel宏,但我需要在不同的Excel文件(“xlsx”)上运行它

每当我尝试下面的代码时,都会收到一条错误消息,说找不到宏,所以我想问题与路径有关

这就是我所拥有的:

import win32com.client
import os

try:
    excel = win32com.client.Dispatch('Excel.Application')
    excel_path = r'C:\Users\martin\Desktop\testing_excel.xlsx'
    workbook = excel.Workbooks.Open(excel_path, ReadOnly=1)
    excel.Application.Run("'macro_testing.xlsm'!local_macro")
    workbook.Save()
    excel.Quit()
    print('Macro run succesfully')

except Exception as e:
    print(e)
    excel.Quit()
带有宏的“xlsm”文件名为“macro\u testing.xlsm”,宏名为“local\u macro”


提前谢谢

当我必须执行类似操作时,我会将宏存储在命令簿(.xlsm)-甚至是从命令簿调用的.xlam(即.xlsm)中,然后它会根据需要打开、操作、保存和关闭.xlsx

如果您试图在.xlsx中运行它,您将永远无法保存完成运行的代码,这对于重复的工作流来说是不可取的

所以

macro_testing.xlsm可能有另一个子系统,类似于:

sub runExternal()

    with Sheets("Sheet1").
        extPath = cells(1,2)  
        extBook = cells(2,2)
        'Declaring the path & workbook to use within the master workbook's "Sheet1"

    workbooks.open(extPath & extBook) ReadOnly:False

    call local_macro()

    application.displayalerts = false  'Just in case there are any GUI prompts
    workbooks(extBook).close saveChanges:=True
    application.displayalerts = true

end sub

对于遇到与我相同问题的任何人,我最终打开了两个Excel文件,如下所示:

import os

excel_path = os.path.abspath('Excel_to_run_macro.xlsx')

if os.path.exists(excel_path):
    xl = win32com.client.Dispatch('Excel.Application')
    xl.Workbooks.Open(os.path.abspath('Excel_with_macro.xlsm'), ReadOnly=1)
    workbook = xl.Workbooks.Open(excel_path, ReadOnly=1)
    xl.Application.Run("'Excel_with_macro.xlsm'!Macro_name")
    workbook.Save()
    xl.Application.Quit()
    del xl

你好@Amiga500!现在的问题是,我正在用一个虚拟Excel进行测试,但我无法更改最终的宏。理想情况下,我应该能够在不同的Excel文件中运行宏,并多次重复该过程。我只是以extPath和extBook的本地声明为例,通常我会从工作表单元格中读取它们。因此,如果这是您唯一关心的问题,那么在修改之后,宏在实际使用中将保持不变。不确定这是否对你有帮助?另一个选项是.xlam(我确实在脚注中提到过),你以前用过吗?这意味着宏存储为外接程序,因此始终可用于excel实例-无论您打开了哪些工作簿。我最后做的是打开两个excel,这样我可以访问宏(我认为宏将应用于上次打开的excel)。无论如何,“.xlam”选项似乎非常有趣!我试试看。谢谢!!注意,宏必须能够处理(使用)不同的excel文件。i、 e.任务的完成还取决于宏的编写方式。