Вызов скрипта Python из Excel/ VBA
У меня есть код Python, который читает 3 аргумента (скаляры) и текстовые файлы, а затем возвращает мне вектор двойной. Я хочу написать макрос в VBA, чтобы вызвать этот код Python и записать результаты в одном листе Excel. Я хотел знать, каков был самый простой способ сделать это, вот несколько вещей, которые я нашел:
вызовите функцию shell() в vba, но не так просто получить возвращаемое значение.
зарегистрировать код Python как COM-объект и вызвать его из vba -> я не знаю, как это сделать, поэтому, если у вас есть несколько примеров, это будет более чем приветствоваться
создайте пользовательский инструмент в пользовательском наборе инструментов, в vba создайте объект геообработки, а затем addtoolbox, и затем мы сможем использовать пользовательский инструмент напрямую через объект геообработки, но я тоже не знаю, как это сделать.
Какие-нибудь советы?
6 ответов
Следуйте этим шагам внимательно
- Перейдите в Activestate и получите установщик ActivePython 2.5.7 MSI.
У меня были проблемы с DLL DLL 2.6.x - Установите на свой компьютер с Windows
После завершения установки откройте командную строку и перейдите к
C:\Python25\ Lib\ сайт-пакеты \win32comext\axscript\ клиент
выполнять
\> python pyscript.py
Вы должны увидеть сообщение Зарегистрировано: PythonПерейти к MS Office Excel и открыть рабочий лист
- Перейдите в Инструменты> Макросы> Редактор Visual Basic
- Добавить ссылку на элемент управления Microsoft Script
- Добавьте новую форму пользователя. В пользовательской форме добавьте CommandButton
Переключитесь в редактор кода и вставьте следующий код
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
Выполнить. Наслаждайтесь и расширяйте по мере необходимости
Вы должны вызывать код Python как макрос? Вы можете использовать COM-хуки внутри скрипта Python для направления 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( )
Вот хорошая ссылка для использования Excel с / на Python:
continuum.io/using-excel
упоминает xlwings, DataNitro, ExPy, PyXLL, XLLoop, openpyxl, xlrd, xlsxwriter, xlwt
Также я обнаружил, что ExcelPython находится в стадии активной разработки.
2.
Что вы можете сделать с VBA + Python:
Скомпилируйте ваши скрипты py, которые принимают входные данные и генерируют выходные данные в виде текстовых файлов или из консоли. Затем VBA подготовит ввод для py, вызовет предварительно скомпилированный скрипт py и прочитает обратно его вывод.
3.
Рассмотрим Google Docs, OpenOffice или LibreOffice, которые поддерживают скрипты Python.
Это предполагает, что доступные опции с интерфейсами сценариев COM или MS не удовлетворяют вашим потребностям.
Это не бесплатный подход, но стоит упомянуть (показанный в Forbes и New York Times):
Это не бесплатно для коммерческого использования:
PyXLL - надстройка для Excel, позволяющая вызывать функции, написанные на Python, в Excel.
Обновлено 2018
xlwings - это лицензированная BSD библиотека Python, которая позволяет легко вызывать Python из Excel и наоборот.
- Сценарии: автоматизируйте / взаимодействуйте с Excel из Python, используя синтаксис, близкий к VBA.
- Макросы: замените грязные макросы VBA чистым и мощным кодом Python.
UDF: написание пользовательских функций (UDF) в Python (только для Windows).
На CodeProject есть учебное пособие о том, как это сделать.
См. http://www.codeproject.com/Articles/639887/Calling-Python-code-from-Excel-with-ExcelPython.
Еще один открытый исходный код python-excel в инструменте com. Это позволяет выполнять сценарии Python из Excel тесно интегрированным способом.