使用Python编写VBA脚本?

Mik*_*ike 6 python vba pywin32 excel-vba autosize

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

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

就像是:

Workbooks.worksheets.Columns("A:Z").EntireColumn.Autofit
Run Code Online (Sandbox Code Playgroud)

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

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

干杯,迈克

Bou*_*oud 6

对的,这是可能的.您可以开始查看如何从该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)
Run Code Online (Sandbox Code Playgroud)

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

  • 我很好奇。我在整个代码中都使用 openpyxl,我不想改变它。我在想,我可以运行我的所有代码并创建工作簿并将其保存到光盘。有什么方法可以在我的代码末尾获取该工作簿并使用 win32 运行您的代码并在此时添加子进程?我正在努力使用 win32 打开现有的 excel 工作表,而不是像上面那样使用 ensureDispatch 打开一个实例。 (2认同)