2013-10-21 102 views
5

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

这个想法来自何处pythons openpyxl模块无法做列autowidth。我在内存中创建了一个工作簿并最终将其保存到光盘。有几张纸,每张纸里面都有很多列。我一直在想....如果我只是使用python将excel中的VBA脚本(保存在记事本中的某处)保存到VBA编辑器中,然后使用pythonwin从python运行该脚本。

喜欢的东西:

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

您发表评论之前,是的,我已经看到了很多的如何解决自动调整openpyxl列Python的例子,但我看到的是可以利用的功能进行了一些有趣的机会你从VBA中得到的可能无法在Python中使用。不管怎么说,我在互联网上挖了一下,我没有看到任何表明我可以的东西,所以我想我会问。

干杯, 迈克

+0

是的,您可以使用Python编写另一种语言的程序,最有可能的是_any_其他语言。 – martineau

+2

如果你打算启动Excel来运行自动适应,你可以通过自动化创建整个事情。那么你将不必做动态代码生成... –

+0

即使这个问题有点尘土飞扬,也许这可能有所帮助:https://www.pyxll.com/docs/macros.html – AnyOneElse

回答

5

是的,这是可能的。你可以开始研究如何从VB上生成一个VBA宏that Microsoft KB

下面的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

+0

我有机会今天尝试和测试代码。非常感谢您的贡献。这使我朝着正确的方向迈进。我有很多其他的想法,这个代码可以帮助。 – Mike

+0

@欢迎你 – Boud

+0

我想知道。我在我的代码中使用了openpyxl,我不想改变它。我在想,我可以运行所有代码并创建工作簿并将其保存到光盘。有没有什么办法可以在我的代码末尾抓取工作簿,并使用win32运行代码并在该子进程中添加?我努力用win32打开现有的Excel表格,而不是像上面那样使用EnsureDispatch打开实例。 – Mike