Вызов скрипта Python из Excel/ VBA

У меня есть код Python, который читает 3 аргумента (скаляры) и текстовые файлы, а затем возвращает мне вектор двойной. Я хочу написать макрос в VBA, чтобы вызвать этот код Python и записать результаты в одном листе Excel. Я хотел знать, каков был самый простой способ сделать это, вот несколько вещей, которые я нашел:

  • вызовите функцию shell() в vba, но не так просто получить возвращаемое значение.

  • зарегистрировать код Python как COM-объект и вызвать его из vba -> я не знаю, как это сделать, поэтому, если у вас есть несколько примеров, это будет более чем приветствоваться

  • создайте пользовательский инструмент в пользовательском наборе инструментов, в vba создайте объект геообработки, а затем addtoolbox, и затем мы сможем использовать пользовательский инструмент напрямую через объект геообработки, но я тоже не знаю, как это сделать.

Какие-нибудь советы?

6 ответов

Следуйте этим шагам внимательно

  1. Перейдите в Activestate и получите установщик ActivePython 2.5.7 MSI.
    У меня были проблемы с DLL DLL 2.6.x
  2. Установите на свой компьютер с Windows
  3. После завершения установки откройте командную строку и перейдите к

    C:\Python25\ Lib\ сайт-пакеты \win32comext\axscript\ клиент

  4. выполнять \> python pyscript.pyВы должны увидеть сообщение Зарегистрировано: Python

  5. Перейти к MS Office Excel и открыть рабочий лист

  6. Перейдите в Инструменты> Макросы> Редактор Visual Basic
  7. Добавить ссылку на элемент управления Microsoft Script альтернативный текст
  8. Добавьте новую форму пользователя. В пользовательской форме добавьте CommandButton
  9. Переключитесь в редактор кода и вставьте следующий код

    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 находится в стадии активной разработки.

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

2.

Что вы можете сделать с VBA + Python:

Скомпилируйте ваши скрипты py, которые принимают входные данные и генерируют выходные данные в виде текстовых файлов или из консоли. Затем VBA подготовит ввод для py, вызовет предварительно скомпилированный скрипт py и прочитает обратно его вывод.

3.

Рассмотрим Google Docs, OpenOffice или LibreOffice, которые поддерживают скрипты Python.

Это предполагает, что доступные опции с интерфейсами сценариев COM или MS не удовлетворяют вашим потребностям.


Это не бесплатный подход, но стоит упомянуть (показанный в Forbes и New York Times):

https://datanitro.com/


Это не бесплатно для коммерческого использования:

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 тесно интегрированным способом.

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

Другие вопросы по тегам