从excel / vba中调用python脚本

我有一个Python代码,读取3个参数(标量)和一个文本文件,然后返回给我一个双向量。 我想在vba中编写一个macros来调用这个python代码,并将结果写入一个相同的excel表单中。 我想知道最简单的方法是什么,下面是我发现的一些东西:

  • 在vba中调用shell()函数,但获取返回值似乎并不那么容易。

  • 注册Python代码作为一个COM对象,并从vba调用它 – >我不知道如何做到这一点,所以如果你有一些例子,这将是更多的欢迎

  • 在自定义工具箱中创build一个自定义工具,在vba中创build一个地理处理对象,然后添加工具箱,然后我们可以直接通过地理处理对象使用自定义工具,但这也是我不知道该怎么做的。

有小费吗?

请仔细按照这些步骤

  1. 转到Activestate并获得ActivePython 2.5.7 MSI安装程序。
    我有2.6.x的DLL地狱问题
  2. 安装在你的Windows机器上
  3. 一旦安装完成,打开命令提示符并转到

    C:\ Python25 \ LIB \站点包\ win32comext \ axscript \客户端

  4. 执行\> python pyscript.py你应该看到消息Registered:Python

  5. 去ms office excel打开工作表

  6. 转到工具>macros> Visual Basic编辑器
  7. 添加对Microsoft脚本控件的引用 替代文字
  8. 添加一个新的用户表单。 在用户窗体中添加一个CommandButton
  9. 切换到代码编辑器并插入以下代码

    Dim WithEvents PyScript作为MSScriptControl.ScriptControl

     Private Sub CommandButton1_Click() If PyScript Is Nothing Then Set PyScript = New MSScriptControl.ScriptControl PyScript.Language = "python" PyScript.AddObject "Sheet", Workbooks(1).Sheets(1) PyScript.AllowUI = True End If PyScript.ExecuteStatement "Sheet.cells(1,1).value='Hello'" End Sub 

执行。 享受和扩大必要的

下面是从Python使用Excel的一个很好的链接:

continuum.io/using-excel

提及xlwings,DataNitro,ExPy,PyXLL,XLLoop,openpyxl,xlrd,xlsxwriter,xlwt

另外我发现ExcelPython正在积极开发中。

  1. https://github.com/ericremoreynolds/excelpython

2。

你可以用VBA + Python做什么:

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

3。

考虑支持Python脚本的Google Docs,OpenOffice或LibreOffice。

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


这不是免费的方法,但值得一提(在“福布斯”和“纽约时报”上刊登):

https://datanitro.com


这不是免费的商业用途:

PyXLL – Excel插件,使用Python编写的函数可以在Excel中调用。

你是否需要将Python代码作为macros调用? 您可以在Python脚本中使用COM挂钩来指导Excel,避免使用其他语言:

 import win32com.client # Start Excel xlApp = win32com.client.Dispatch( "Excel.Application" ) workbook = xlApp.Workbooks.Open( <some-file> ) sheet = workbook.Sheets( <some-sheet> ) sheet.Activate( ) # Get values spam = sheet.Cells( 1, 1 ).Value # Process values ... # Write values sheet.Cells( ..., ... ).Value = <result> # Goodbye Excel workbook.Save( ) workbook.Close( ) xlApp.Quit( ) 

2017年更新

xlwings是BSD授权的Python库,可以很容易地从Excel调用Python,反之亦然。

  • 脚本 :使用接近VBA的语法,从Python自动化/与Excel进行交互。
  • macros :用干净而强大的Python代码replace凌乱的VBAmacros。
  • UDF :在Python中编写用户定义函数(UDF)(仅限Windows)。

  • 安装

  • 快速开始

CodeProject上有一个关于如何做到这一点的教程。

请参阅http://www.codeproject.com/Articles/639887/Calling-Python-code-from-Excel-with-ExcelPython

另一个开源的python-excel进程com工具。 这允许以紧密集成的方式从excel执行python脚本。

https://pypi.python.org/pypi/Python-For-Excel/beta,%201.1