python可以添加,运行和删除VBA宏,而无需中间保存步骤吗?

sud*_*nym 5 python excel vba excel-vba pandas

我有一个长期运行的python管道,它生成一个pandas数据帧.简而言之,我想:

  1. 在excel中显示pandas数据帧
  2. 添加并运行VBA宏
  3. 删除VBA宏并将(新格式化的)输出保存为 .xslx

挑战在于,如果没有中间的save-as xlsm-file步骤,我无法弄清楚如何做到这一点,这在将VBA宏添加到.xlsx文件时显然是必需的.由于这是低效的,我想摆脱这个中间步骤.

这是代码:

1.在excel中显示pandas数据框:

with pd.ExcelWriter('output.xlsx') as writer:
     df_results.to_excel(writer, index = False, sheet_name = "Sheet1")
     #...see below
Run Code Online (Sandbox Code Playgroud)

2A.添加宏并指定.xlsm-filename,以便writer可以保存宏

     #... see above
     writer.book.filename = 'output.xlsm'           # Add .xlsm filename
     writer.book.add_vba_project('VBA_script.bin')  # This adds my macro
     writer.save()                                  # How to get rid of this step?
Run Code Online (Sandbox Code Playgroud)

2B.运行宏

xl = win32com.client.Dispatch("Excel.Application")  # Set up excel
xl.Workbooks.Open(Filename = 'output.xlsm')         # Open .xlsm file from step 2A
xl.Application.Run("Module1.Main")                  # Run VBA_macro.bin
Run Code Online (Sandbox Code Playgroud)

3.删除宏并保存到.xlsx

wb = xl.ActiveWorkbook
xl.DisplayAlerts = False
wb.DoNotPromptForConvert = True
wb.CheckCompatibility = False
wb.SaveAs('final_outfile.xlsx', FileFormat=51, ConflictResolution=2) # Macro disapears here
xl.Application.Quit()
del xl
xl = None
Run Code Online (Sandbox Code Playgroud)

是否可以在没有中间.xlsm步骤和更短代码的情况下执行此操作?

如何在excel上下文中添加,运行和删除VBA宏,而无需使用python进行中间保存步骤?

Ric*_*o A 4

是的,创建实例,使用内置的 VBA 代码导入,运行宏,另存为 xlsx 以删除宏。

xl = win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Add
wb = xl.ActiveWorkbook
wb.VBProject.VBComponents.Import "Full Path\VBA_script.bin"
xl.Application.Run("Module1.Main")
xl.DisplayAlerts = False
wb.DoNotPromptForConvert = True
wb.CheckCompatibility = False
wb.SaveAs('final_outfile.xlsx', FileFormat=51, ConflictResolution=2) # Macro disapears here
xl.Application.Quit()
del xl
xl = None
Run Code Online (Sandbox Code Playgroud)