使用Python编写VBA脚本?

时间:2013-10-21 22:08:54

标签: python excel-vba pywin32 autosize vba

这可能有点延伸,但是有可能使用pythonwin或任何其他模块使用python脚本在MS Excel(或使用VBA的任何其他MS Office产品)中创建VBA。

这个想法来自于pythons openpyxl模块无法进行列自动宽度。我在脚本中创建了一个工作簿,最终将其保存到光盘中。每张纸都有相当多的纸张,有很多列。我开始思考......如果我只是使用python将一个VBA脚本(保存在记事本或其他东西中)导入到excel中的VBA编辑器中,然后使用pythonwin从python运行该脚本。

类似的东西:

Workbooks.worksheets.Columns("A:Z").EntireColumn.Autofit

在您发表评论之前,是的,我已经看到了很多关于如何在openpyxl中解决自动调整列的pythonic示例,但是我看到了一些有趣的机会可以利用从VBA获得的功能,可能在python中不可用

无论如何,我在互联网上挖了一下,我没有看到任何表明我可以的东西,所以我想我会问。

干杯, 麦克

1 个答案:

答案 0 :(得分:5)

是的,有可能。您可以开始查看如何在that Microsoft KB上从VB生成VBA宏。

下面的Python代码说明了如何做到这一点;它是KB示例代码前半部分的基本端口:

import win32com.client as win32

import comtypes, comtypes.client

xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
ss = xl.Workbooks.Add()
sh = ss.ActiveSheet

xlmodule = ss.VBProject.VBComponents.Add(1)  # vbext_ct_StdModule

sCode = '''sub VBAMacro()
       msgbox "VBA Macro called"
      end sub'''

xlmodule.CodeModule.AddFromString(sCode)

您可以查看可见的自动Excel宏,您将看到上面定义的VBAMacro