我有一个python代码,它读取3个参数(标量)和一个文本文件,然后返回一个double的向量。我想在vba中编写一个宏来调用这个python代码并将结果写在同一个excel表中。我想知道最简单的方法是什么,这里有一些我发现的东西:
在vba中调用shell()函数,但获取返回值似乎不那么容易。
将python代码注册为COM对象,并从vba中调用它 - >我不知道该怎么做,所以如果你有一些例子,那将非常受欢迎
在自定义工具箱中创建自定义工具,在vba中创建地理处理对象,然后添加工具箱,然后我们可以直接通过地理处理对象使用自定义工具,但这也是我不知道如何要做..
任何提示?
答案 0 :(得分:17)
请仔细执行以下步骤
安装完成后打开命令提示符并转到
C:\ Python25 \ lib中\站点包\ win32comext \ axscript \客户端
执行\> python pyscript.py
你应该看到消息已注册:Python
转到ms office excel并打开工作表
切换到代码编辑器并插入以下代码
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
执行。根据需要享受和扩展
答案 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正在积极开发中。
2
您可以使用VBA + Python做些什么:
编译你的py脚本,它接受输入并生成输出作为文本文件或从控制台。然后VBA将为py准备输入,调用预编译的py脚本并读回其输出。
3
考虑支持Python脚本的Google Docs,OpenOffice或LibreOffice。
这假设使用COM或MS脚本界面的可用选项无法满足您的需求。
这不是免费的方法,但值得一提(在福布斯和纽约时报上刊登):
这不能免费用于商业用途:
PyXLL - Excel插件,可以在Excel中调用用Python编写的函数。
答案 3 :(得分:1)
xlwings是一个获得BSD许可的Python库,可以很容易地从Excel调用Python,反之亦然。
UDF :在Python中编写用户定义函数(UDF)(仅限Windows)。
答案 4 :(得分:0)
有关于如何执行此操作的CodeProject教程。
请参阅http://www.codeproject.com/Articles/639887/Calling-Python-code-from-Excel-with-ExcelPython。
答案 5 :(得分:0)
进程com工具中的另一个开源python-excel。 这允许以紧密集成的方式从excel执行python脚本。