使用Python编写MS Office宏?

使用Python编写MS Office宏?,python,excel,vba,ms-office,Python,Excel,Vba,Ms Office,我最近把它作为一个项目来教自己如何用Python编程。总的来说,我必须说我对它印象深刻 在过去,我通常坚持使用VBA编程,主要是针对MS Excel(但也有一点是MS Access和Word),并且一直在努力找到方法使其能够完成Python可以用一个命令轻松完成的事情 我想知道是否有一种合理的方法来利用Python的编程能力和易用性,同时利用Office中的各种工具(主要是Excel)?是的,绝对如此。您想使用win32com模块,它是pywin32()的一部分 我发现,通过在VBA中编写一个宏

我最近把它作为一个项目来教自己如何用Python编程。总的来说,我必须说我对它印象深刻

在过去,我通常坚持使用VBA编程,主要是针对MS Excel(但也有一点是MS Access和Word),并且一直在努力找到方法使其能够完成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")

我相信有很多这样的例子。。。喜欢。

或者看看IronPython。IPy是Python2.6的本机.NET实现,您可以在中找到它

我们已经在几个项目中使用了它。您可以使用COM“从外部”使用它,或者——就像我们所做的那样——编写一个带有ScriptHost的Excel加载项,它调用IronPython代码,为您提供一个类似于VBA的环境


作为一个.NET dll,IPy非常好地集成到现代Windows.NET堆栈中。

有一组跨平台的Python实用程序,称为xlrd、xlwt和xlutils,用于读取和写入Excel文件。有一些限制(例如,我认为它们不能处理宏),但它们确实允许您在非Windows平台上使用Excel文件,如果这对您有用的话。见:

此外,已经有很多问题涉及这类主题,包括:

上述xlrd、xlwt和xlutils包只能读取和写入.xls文件,这些文件的大小限制为65000行和256列。除此之外,这是一个很好的工具

但我已经转到另一个python excel包OpenPyXL,它可以读取和写入.xlsx文件。我还发现它易于使用,文档也很好

OpenPyXL:

这里有一个有用的链接:

  • 请尝试Pyvot–Microsoft提供的Python与Excel之间的连接:

  • 我也非常喜欢同一个开发团队的PTV,它提供了迄今为止我所经历的最好的Python调试

    二,

    使用VBA+Python可以执行以下操作:

    编译py脚本,将输入作为文本文件或从控制台生成输出。然后VBA将为py准备输入,调用预编译的py脚本并读回其输出

    三,

    考虑支持Python脚本的OpenOffice或LibreOffice

    这是假设COM或MS脚本接口的可用选项不能满足您的需要

    四,

    这不是免费的方法,但值得一提(福布斯和纽约时报报道):

    五,

    这不是免费的商业用途:


    PyXLL-Excel插件,允许在Excel中调用用Python编写的函数。

    这是一个很久以前的问题,但我把它放在这里,以便其他人可以在搜索时指向它

    这里没有讨论的一个选项(我一直在使用)是从Python创建COM服务器,并在任何Office应用程序中从VBA调用它。关于使用Python运行COM服务器,有一个很好的教程:


    最终得到的是一个COM服务器(不要忘了在过程中创建),它可以通过在VBA中调用
    CreateObject()
    来创建。然后调用它的方法,就像使用
    CreateObject()
    创建COM对象一样。您不能单步执行Python脚本,但可以从Pywin32发行版截取使用Win32 TraceUtil的日志记录。工作完美无瑕

    我一直想知道是否有可能对行/列执行列表/命令,或者包括numpy和excel,或者可能是pyqt+numpy作为excel的一个附件。请看这本书,“Win32上的Python编程”。它真的告诉你你需要知道的一切。这是一本好书。示例章节:这都是很好的信息,它明确地给了我一个方向(实际上不止一个)。我在其他地方找不到类似的答案,但显然没有使用正确的关键字。我也认为这实际上是最好的解决方案。如果你走这条路线,你可以免费下载,然后下载for visual studio。我知道这已经过时了,但是你能提供一些例子吗?