从Excel/VBA调用Python脚本
我有一段Python代码,它可以读取三个参数(标量)和一个文本文件,然后返回一个双精度向量。我想在VBA中写一个宏来调用这段Python代码,并把结果写入同一个Excel表格里。我想知道最简单的方法是什么,以下是我找到的一些方法:
在VBA中调用shell()函数,但似乎获取返回值并不简单。
把Python代码注册为COM对象,然后从VBA中调用它——我不知道怎么做,如果你有一些例子,那就太好了。
在自定义工具箱中创建一个自定义工具,在VBA中创建一个地理处理对象,然后添加工具箱,这样我们就可以通过地理处理对象直接使用自定义工具,但我也不知道怎么做……
有没有什么建议?
6 个回答
这里有一个关于如何在Python和Excel之间使用的好链接:
continuum.io/using-excel
里面提到了几个工具,比如xlwings、DataNitro、ExPy、PyXLL、XLLoop、openpyxl、xlrd、xlsxwriter和xlwt。
我还发现ExcelPython正在积极开发中。
2.
使用VBA和Python可以做到以下几点:
你可以编写Python脚本,输入数据并生成文本文件或从控制台输出。然后,VBA会准备好输入数据,调用已经编译好的Python脚本,并读取它的输出结果。
3.
你还可以考虑使用Google文档、OpenOffice或LibreOffice,这些都支持Python脚本。
这是假设你觉得使用COM或微软脚本接口的选项不够满足你的需求。
这不是免费的方法,但值得一提(在《福布斯》和《纽约时报》上都有报道):
这对于商业用途不是免费的:
PyXLL - 这是一个Excel插件,可以让你在Excel中调用用Python编写的函数。
你需要把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( )
请仔细按照以下步骤操作:
- 去Activestate网站下载 ActivePython 2.5.7 的安装包。
我在使用2.6.x版本时遇到了DLL的问题。 - 在你的Windows电脑上安装它。
安装完成后,打开命令提示符,进入以下路径:
C:\Python25\lib\site-packages\win32comext\axscript\client
执行
\> python pyscript.py
,你应该会看到“Registered: Python”的消息。打开Excel,进入工作表。
- 点击工具 > 宏 > Visual Basic编辑器。
- 添加对Microsoft Script控制的引用
- 添加一个新的用户表单。在用户表单中添加一个命令按钮。
切换到代码编辑器,插入以下代码:
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
执行。享受这个过程,并根据需要进行扩展。