我最近把它作为一个项目来教我自己如何用Python编程。总的来说,我必须说我对它印象深刻。
在过去,我通常坚持使用VBA进行编程,主要是针对MS Excel(但也有点在MS Access和Word中),并且一直在努力寻找方法使Python能够通过单个命令轻松完成
我想知道是否有合理的方法来利用Python的编程能力和易用性,同时利用Office中的各种工具(主要是Excel)?
答案 0 :(得分:22)
是的,绝对的。您想使用win32com
模块,它是pywin32(get it here)的一部分。
我发现你可以通过在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")
我确信在SO上有很多例子......比如this one。
答案 1 :(得分:8)
有一组跨平台的Python实用程序 - 称为xlrd,xlwt和xlutils - 用于阅读和阅读。写Excel文件。存在一些限制(例如,我不认为它们可以处理宏),但它们允许您在非Windows平台上使用Excel文件,如果这对您有用。请参阅:http://www.python-excel.org/
此外,还有一些问题已经涉及到这类话题,包括: Is there a better way (besides COM) to remote-control Excel?
答案 2 :(得分:7)
或者看看IronPython。 IPy是Python 2.6的本机.NET实现,您可以在http://www.codeplex.com/ironpython找到它。
我们已将它用于多个项目。您可以使用COM“从外部”使用它 - 或者像我们一样 - 使用ScriptHost编写Excel AddIn,它会调用IronPython代码,为您提供类似于VBA的环境。
作为.NET dll,IPy可以很好地集成到现代Windows .NET堆栈中。
答案 3 :(得分:4)
上面提到的xlrd,xlwt和xlutils包只能读写.xls文件,这些文件的大小限制为65,000行和256列。除此之外,它是一个很好的工具。
但我已经转移到另一个python-excel包OpenPyXL,它可以读写.xlsx文件。此外,我发现它易于使用,文档也很好。
答案 4 :(得分:3)
这是一个有用的链接:
http://continuum.io/using-excel
尝试使用Pyvot - 来自Microsoft的Excel连接器的Python:
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插件,可以在Excel中调用用Python编写的函数。
答案 5 :(得分:2)
这是一个很久以前的问题,但我把它放在这里,以便其他人可以在搜索中指出它。
此处未讨论的一个选项(我一直使用它)是从Python创建一个COM服务器,并在任何Office应用程序中从VBA调用它。在http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html
有一个很好的使用Python做COM服务器的教程您最终得到的是一个COM服务器(不要忘记让它在进行中),可以通过在VBA中调用CreateObject()
来创建。然后,就像使用CreateObject()
创建的COM对象一样调用它上面的方法。您不能单步执行Python脚本,但可以使用Pywin32发行版中的win32traceutil拦截日志记录。工作完美无瑕。