从excel / vba调用python脚本

时间:2010-08-25 15:10:57

标签: python excel vba excel-vba

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

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

  • 将python代码注册为COM对象,并从vba中调用它 - >我不知道该怎么做,所以如果你有一些例子,那将非常受欢迎

  • 在自定义工具箱中创建自定义工具,在vba中创建地理处理对象,然后添加工具箱,然后我们可以直接通过地理处理对象使用自定义工具,但这也是我不知道如何要做..

任何提示?

6 个答案:

答案 0 :(得分:17)

请仔细执行以下步骤

  1. 转到Activestate并获取ActivePython 2.5.7 MSI安装程序 我有2.6.x的DLL地狱问题
  2. 在Windows计算机中安装
  3. 安装完成后打开命令提示符并转到

      

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

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

  5. 转到ms office excel并打开工作表

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

      

    Dim WithEvents PyScript As   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
    
  11. 执行。根据需要享受和扩展

答案 1 :(得分:4)

您是否必须将Python代码称为宏?您可以在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( )

答案 2 :(得分:3)

以下是Excel与Python使用的良好链接:

continuum.io/using-excel

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

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

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

    您可以使用VBA + Python做些什么:

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

    3

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

    这假设使用COM或MS脚本界面的可用选项无法满足您的需求。


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

    https://datanitro.com


    这不能免费用于商业用途:

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

答案 3 :(得分:1)

2018年更新

xlwings是一个获得BSD许可的Python库,可以很容易地从Excel调用Python,反之亦然。

  • 脚本:使用接近VBA的语法从Python自动化/与Excel交互。
  • :用干净且功能强大的Python代码替换乱糟糟的VBA宏。
  • UDF :在Python中编写用户定义函数(UDF)(仅限Windows)。

  • Installation

  • Quickstart

答案 4 :(得分:0)

有关于如何执行此操作的CodeProject教程。

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

答案 5 :(得分:0)

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

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