最近我自己开始学习Python编程,整体来说,我对它的表现印象深刻。
过去,我通常只在MS Excel(也有一些在MS Access和Word中)中使用VBA进行编程,并且很难找到办法使其实现Python可以轻松完成的单个命令。
我想知道是否存在一种合理的方法,既可以利用Python的编程能力和易用性,又可以利用Office中的各种工具(主要是Excel)?
最近我自己开始学习Python编程,整体来说,我对它的表现印象深刻。
过去,我通常只在MS Excel(也有一些在MS Access和Word中)中使用VBA进行编程,并且很难找到办法使其实现Python可以轻松完成的单个命令。
我想知道是否存在一种合理的方法,既可以利用Python的编程能力和易用性,又可以利用Office中的各种工具(主要是Excel)?
是的,完全可以。您需要使用win32com
模块,它是pywin32的一部分(在这里获取)。
我发现您可以通过编写一个VBA宏供Python使用来大大简化Python集成,然后只需让Python调用该宏即可。它将类似于这样:
from win32com.client import Dispatch as comDispatch
xl = comDispatch('Excel.Application')
xl.Workbooks.Open("Macros.xls", False, True)
xl.Run("Macros.xls!Macro_1")
我相信在stackoverflow上有很多类似的例子...比如这个。
有一套跨平台的Python工具-称为xlrd、xlwt和xlutils-用于读取和写入Excel文件。这些工具存在一些限制(例如,我认为它们不能处理宏),但如果您需要在非Windows平台上使用Excel文件,它们可以让您做到这一点。请参见:http://www.python-excel.org/
此外,已经有一些关于此类主题的stackoverflow问题,包括:除了COM以外,是否有更好的方法来远程控制Excel?
或者看一下IronPython。IPy是Python 2.6的本机.NET实现,您可以在http://www.codeplex.com/ironpython上找到它。
我们已经在多个项目中使用它。您可以使用COM“从外部”使用它,或者像我们一样编写一个带有ScriptHost的Excel AddIn,该主机调用IronPython代码,从而为您提供类似于VBA的环境。
作为.NET dll,IPy与现代Windows .NET堆栈非常集成。
上述提到的xlrd、xlwt和xlutils包只能读取和写入大小限制为65,000行和256列的.xls文件。除此之外,它是一个不错的工具。
但我已经转向另一个Python-Excel包OpenPyXL,它可以读取和写入.xlsx文件。此外,我发现它易于使用,文档也很好。
以下是一条有用的链接:
http://continuum.io/using-excel
尝试使用来自微软的Python到Excel连接器:Pyvot:
http://pytools.codeplex.com/wikipage?title=Pyvot
我还非常喜欢来自同一开发团队的PTVS,它提供了我迄今为止体验过的最佳Python调试功能。
2.
您可以通过VBA + Python做以下事情:
编译接受输入并生成输出文本文件或从控制台的py脚本。然后,VBA将为py准备好输入,调用预编译的py脚本,并读取其输出。
3.
考虑支持Python脚本的OpenOffice或LibreOffice。
这是在COM或MS脚本接口可用选项不能满足您的需求的情况下才会被考虑。
4.
这不是免费的方法,但值得一提(在福布斯和纽约时报中推荐):
5.
这不适用于商业用途:
PyXLL - Excel插件,可调用用Python编写的函数。
这是一个很久以前的问题,但我将其放在这里,以便其他人可以在搜索中找到它。
这里没有讨论的一个选项(我经常使用)是从Python创建一个COM服务器,并在任何Office应用程序中调用它的VBA。有一个很好的使用Python创建COM服务器的教程,网址为:http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html
你最终得到的是一个COM服务器(不要忘记使其进程内),可以通过在VBA中调用CreateObject()
来创建。然后像使用CreateObject()
创建的COM对象一样调用其中的方法。你不能单步运行Python脚本,但你可以使用Pywin32分发中的win32traceutil拦截日志。完美无缺。