使用Python编写MS Officemacros?
我最近把它作为一个项目来教自己如何用Python进行编程。 总的来说,我必须说我对它印象深刻。
在过去,我一直坚持使用VBA进行编程,主要是为MS Excel(但在MS Access和Word中也有一些),并努力想方设法使Python能够轻松完成一个命令。
我想知道是否有合理的方法来利用编程能力和轻松的Python,同时利用Office中的各种工具(主要是Excel)?
有一组跨平台的Python实用程序 – 称为xlrd,xlwt和xlutils – 用于读写Excel文件。 有一些限制(例如,我不认为他们可以处理macros),但是它们允许您在非Windows平台上使用Excel文件,如果这对您有用的话。 请参阅: http : //www.python-excel.org/
此外,还有一些问题已经在处理这类问题,包括: 有没有更好的方法(除了COM)远程控制Excel?
是的,一点没错。 你想使用win32com
模块,这是pywin32的一部分( 在这里得到它 )。
我发现你可以真正简化Python集成,方法是在VBA中为Python编写一个macros,然后让Python调用这个macros。 它看起来像这样:
from win32com.client import Dispatch as comDispatch xl = comDispatch('Excel.Application') xl.Workbooks.Open("Macros.xls", False, True) xl.Run("Macros.xls!Macro_1")
我确定这里有很多例子…就像这个 。
或者看看IronPython。 IPy是Python 2.6的本地.NET实现,您可以在http://www.codeplex.com/ironpythonfind它。
我们用它来做好几个项目。 你可以使用“从外部”使用COM,或者像我们一样,使用ScriptHost编写一个Excel AddIn,它调用IronPython代码给你一个类似于VBA的环境。
作为一个.NET dll,IPy与现代Windows .NET栈非常好地集成在一起。
上面提到的xlrd,xlwt和xlutils包只能读取和写入具有65,000行和256列大小限制的.xls文件。 除此之外,这是一个很好的工具。
但是我已经转向另一个可以读取和写入.xlsx文件的python-excel包,OpenPyXL。 另外我觉得它很容易使用和文档是好的。
OpenPyXL: http ://packages.python.org/openpyxl/index.html
这里是一个有用的链接:
http://continuum.io/using-excel
-
尝试Pyvot – 来自Microsoft的Excel连接器的Python:
http://pytools.codeplex.com/wikipage?title=Pyvot
我也非常喜欢来自同一个开发者的PTVS。 团队,它提供了迄今为止我所经历的最好的Pythondebugging。
2。
你可以用VBA + Python做什么:
编译你的py脚本,它将input和输出生成为文本文件或从控制台。 然后VBA将为py准备input,调用预编译的py脚本并读回它的输出。
3。
考虑支持Python脚本的OpenOffice或LibreOffice。
这是假设COM或MS脚本接口的可用选项不能满足您的需求。
4。
这不是免费的方法,但值得一提(福布斯和纽约时报):
5。
这不是免费的商业用途:
PyXLL – Excel插件,使用Python编写的函数可以在Excel中调用。
这是一个很久以前的问题,但我把它放在这里,以便其他人可以在他们的search中指出。
这里我没有讨论过的一个选项,我一直使用它,就是从Python创build一个COM服务器,并在任何Office应用程序中从VBA调用它。 有一个很好的教程,用Python做COM服务器: http : //timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html
你最终得到的是一个COM服务器(不要忘记使它在进程中),可以通过在VBA中调用CreateObject()
来创build。 然后,您可以像使用CreateObject()
创build的COM对象一样调用其上的方法。 你不能单步执行你的Python脚本,但是你可以用Pywin32发行版中的win32traceutil拦截日志logging。 作品完美无瑕。