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

Posted

技术标签:

【中文标题】python可以在没有中间保存步骤的情况下添加、运行和删除VBA宏吗?【英文标题】:Can python add, run & remove a VBA macro to excel without intermediate saving steps? 【发布时间】:2018-09-27 00:01:02 【问题描述】:

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

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

挑战在于我无法弄清楚如何做到这一点987654323@ 文件。由于这效率低下,我想摆脱这个中间步骤。

代码如下:

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 进行中间保存步骤?

【问题讨论】:

是否需要将代码添加到相关工作簿中?否则,您应该能够将代码放在单独的(并且可能永久存在?).xlsm 并从那里修改您的 .xlsx。 我想过这个问题——如果这个问题的答案被证明是“否”,这就是它的结果 为什么不将宏代码放在第二个工作簿中? 另外,是什么创建了VBA_script.bin,有没有 Python 库可以做到这一点? 是的,脚本叫做VBA_extract.py 【参考方案1】:

是的,创建实例,使用内置的 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可以在没有中间保存步骤的情况下添加、运行和删除VBA宏吗?的主要内容,如果未能解决你的问题,请参考以下文章

仅在按钮单击时添加记录

是否可以在不保存的情况下运行python脚本? [关闭]

Python啥情况下会生成pyc文件

scrapy多个爬虫公用一些中间件pipelines

python中的数据写入与添加数据写入

Python_绘制图像