python - python 可以添加、运行和删除 VBA 宏以在没有中间保存步骤的情况下表现出色吗?

标签 python vba excel pandas

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

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

挑战在于,如果没有中间的 save-as-xlsm-file 步骤,我不知道如何执行此操作,这显然是添加.xlsx 文件的 VBA 宏。由于这是低效的,我想去掉这个中间步骤。

代码如下:

<强>1。在 excel 中显示 pandas 数据框:

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

2A。添加宏并分配 .xlsm-filename 以便作者可以保存宏

     #... 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?

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

<强>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

是否可以在没有中间 .xlsm 步骤的情况下使用更短的代码来做到这一点?

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

最佳答案

是的,创建实例,使用内置的 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

关于python - python 可以添加、运行和删除 VBA 宏以在没有中间保存步骤的情况下表现出色吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49870991/

相关文章:

python - CSRF cookie 未设置 django...验证失败

python - 延迟加载 python 子模块,importlib 第一次失败

python - 导入错误: cannot import name Serializer

excel - UsedRange 循环比预期大

python - 如果文本有 <br/>,lxml 无法获取元素中的所有文本?

r - 在 SPSS、R 或 Excel 中按其他变量分组的向量之间的欧氏距离

regex - 如何像在Excel中一样在Excel VBA中使用Excel Replace <*>? (常用表达)

excel - 更改形状的背景颜色

vba - 您能否列出 Excel VBA 中条件语句的可能值

excel - 使用宏设置 Excel 数据连接 (csv)