Я пытаюсь запустить сценарий python
, используя VBA в Outlook. Сценарий python
предназначен для извлечения некоторых данных с использованием REST API
и записи в файл в системе. И я использую VBA
, чтобы организовать это, отправляя электронные письма соответствующим людям.
Приведенный ниже скрипт на Python (get_people.py
) работает нормально, когда я запускаюсь из ОС Он просто вызывает REST API и получает список имен людей и записывает их в файл в ОС.
Я пробовал два метода:
упаковка python
выполнения в Batch
файлы с именем getNames.bat
:
#getNames.bat file
C:\Python37\python.exe "C:\scripts\get_people.py"
и VBA для вызова .bat
файлов:
Sub GetNames()
Dim wsh as Object
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim sScript As String
Set wsh = VBA.CreateObject("WScript.Shell")
Set sScript = "C:\scripts\getNames.bat"
wsh.Run sScript, windowStyle, waitOnReturn
...
'Rest is reading the content of the file that written by python script and send emails to someone.
...
Exit Sub
Тем не менее, запущенная строка Python не работает в VBA, но она запускается, если я выполняю вручную с cmd.exe
. В VBA cmd
экран быстро всплывает и исчезает.
Запуск сценариев Python непосредственно в VBA:
Sub GetNames()
Dim wsh as Object
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim sScript As String
Dim PyExe As String
Dim PyScript As String
Set wsh = VBA.CreateObject("WScript.Shell")
Set PyExe = "C:\Python37\python.exe"
Set PyScript = "C:\scripts\get_people.py"
wsh.Run PyExe & " " & PyScript
....
'This one crashes Outlook
...
Exit Sub
Я попробовал простые команды Powershell вместо python в файле .bat:
#getNames.bat file
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "Get-Date"
и этот тоже не работает.
Поскольку я не очень разбираюсь в VBA, я ищу помощи, чтобы направить меня в правильном направлении.