Вызов скрипта Python из excel / vba

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

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

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

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

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

10
задан wolfcastle 1 December 2015 в 22:06
поделиться

2 ответа

Внимательно выполните следующие действия.

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

    C: \ Python25 \ lib \ site-packages \ win32comext \ axscript \ client

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

  5. Перейдите в ms office excel и откройте рабочий лист

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

    Dim WithEvents PyScript As MSScriptControl.ScriptControl

     Частная подпрограмма CommandButton1_Click ()
    Если PyScript - это ничто, тогда
    Установите PyScript = New MSScriptControl.ScriptControl
    PyScript.Language = "питон"
    PyScript.AddObject "Лист", Рабочие книги (1). Таблицы (1)
    PyScript.AllowUI = True
    Конец, если
    PyScript.ExecuteStatement "Sheet.cells (1,1) .value = 'Hello'"
    Конец подписки
    

Выполнить. Наслаждайтесь и расширяйте по мере необходимости

17
ответ дан 3 December 2019 в 16:28
поделиться

Вы должны вызывать код 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( )
4
ответ дан 3 December 2019 в 16:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: