У меня есть код Python, который читает 3 аргумента (скаляры) и текстовые файлы, а затем возвращает мне вектор двойной , Я хочу написать макрос в VBA, чтобы вызвать этот код Python и записать результаты в одном листе Excel. Я хотел знать, каков был самый простой способ сделать это, вот несколько вещей, которые я нашел:
вызывают функцию shell () в vba, но не так просто получить возвращаемое значение.
регистрируют код python как COM-объект и вызывают его из vba -> я не знаю как для этого, если у вас есть несколько примеров, было бы более чем приятно
создать пользовательский инструмент в пользовательском наборе инструментов, в vba создать объект геообработки и затем addtoolbox, а затем мы можем использовать пользовательский инструмент напрямую через объект геообработки, но это то, что я тоже не знаю, как это сделать.
Есть какие-нибудь советы?
Внимательно выполните следующие действия.
после завершения установки откройте командную строку и перейдите в
C: \ Python25 \ lib \ site-packages \ win32comext \ axscript \ client
выполнить \> python pyscript.py
вы должны увидеть сообщение Зарегистрировано: Python
Перейдите в ms office excel и откройте рабочий лист
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'" Конец подписки
Выполнить. Наслаждайтесь и расширяйте по мере необходимости
Вы должны вызывать код 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( )