从excel/vba调用python脚本

Ann*_*nha 10 python excel vba excel-vba

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

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

  • 将python代码注册为COM对象并从vba调用它 - >我不知道如何做到这一点所以如果你有一些例子它会非常受欢迎

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

有小费吗?

ren*_*ick 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 Script控件的引用 替代文字
  8. 添加新的用户表单.在UserForm中添加一个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
    
    Run Code Online (Sandbox Code Playgroud)

执行.根据需要享受和扩展


Kat*_*iel 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( )
Run Code Online (Sandbox Code Playgroud)