Excel vba에서 python 스크립트를 호출하는 방법
VBA에서 python 스크립트를 호출하려고 하는데 저는 초보입니다.py2exe를 사용하여 메인 스크립트를 exe로 변환한 후 VBA(셸)에서 호출하려고 했는데, 메인 스크립트가 다른 스크립트를 호출하기 때문에 복잡해져서 (내 exe가 기능하지 않습니다.게다가 메인 스크립트가 큰 파일이기 때문에 많이 수정하고 싶지 않습니다.
요컨대 스크립트를 exec 파일로 변환하지 않고 Excel vba에서 메인 스크립트를 호출할 수 있는 방법이 있습니까?
지금까지, 저는 다음과 같이 시도했다.
RetVal = Shell("C:\python27\python.exe " & "import " & "C:\\" & "MainScriptFile")
python.exe가 시작되지만 다른 작업은 수행되지 않습니다.그리고 나서 나는 시도했다:
RetVal = Shell("C:\Windows\System32\cmd.exe " & "python " & "C:\\Python27\\hello.py")
명령 프롬프트가 시작되지만 python은 시작되지도 않습니다.
P.S. 포럼에서 관련된 질문들을 모두 확인했지만, 그것들은 제 문제를 해결해주지 않습니다.
이것을 시험해 보세요.
RetVal = Shell("<full path to python.exe> " & "<full path to your python script>")
또는 python 스크립트가 워크북과 같은 폴더에 있는 경우 다음을 시도할 수 있습니다.
RetVal = Shell("<full path to python.exe> " & ActiveWorkBook.Path & "\<python script name>")
<고객명>님에 기재되어 있습니다.<>
주어질 것이다. <>
가능한 . - 변경 가능한 필드입니다.
이거면 될 것 같아.그러나 스크립트가 다른 폴더에 있는 다른 파일을 호출할 경우 스크립트가 적절하게 처리하지 않으면 오류가 발생할 수 있습니다.도움이 됐으면 좋겠다.
이 오래된 포스트를 우연히 발견했어요.위에 열거된 어떤 것도 나에게는 효과가 없었다.아래 스크립트를 테스트해 본 결과, 시스템에서 정상적으로 동작했습니다.나 다음에 이 자리에 온 다른 사람들을 위해 여기서 나누는 것.
Sub RunPython()
Dim objShell As Object
Dim PythonExe, PythonScript As String
Set objShell = VBA.CreateObject("Wscript.Shell")
PythonExe = """C:\your_path\Python\Python38\python.exe"""
PythonScript = "C:\your_path\from_vba.py"
objShell.Run PythonExe & PythonScript
End Sub
이 문제를 해결할 수 있는 몇 가지 방법이 있습니다.
Pynx - Excel 프로세스 공간에서 Python을 호출할 수 있는 매우 가벼운 도구 http://code.google.com/p/pyinex/
몇 년 전에 사용한 적이 있는데 (개발이 한창이던 시절) 꽤 잘 작동했습니다.
돈 내도 괜찮으시다면, 이건 꽤 괜찮아 보이는데요.
https://datanitro.com/product.html
한 번도 안 써봤는데
만약 당신이 Python으로 이미 글을 쓰고 있다면, 당신은 완전히 Excel을 버리고 순수한 Python으로 모든 것을 할 수 있다.2(피톤 + Excel 오버레이)보다 1개의 코드 베이스(피톤)를 유지하는 것이 훨씬 쉽습니다.
데이터를 Excel로 출력해야 한다면 Python에는 이를 위한 훌륭한 툴도 있습니다.그게 더 잘 될 것 같으면 연락 주시면 링크를 받을게요.
왜 창이 깜박이고 아무것도 하지 않고 사라지는지 궁금할 때 Python 스크립트는 VBA에서 shell 명령을 호출한 후 수행해야 할 작업입니다.내 프로그램에서
Sub runpython()
Dim Ret_Val
args = """F:\my folder\helloworld.py"""
Ret_Val = Shell("C:\Users\username\AppData\Local\Programs\Python\Python36\python.exe " & " " & args, vbNormalFocus)
If Ret_Val = 0 Then
MsgBox "Couldn't run python script!", vbOKOnly
End If
End Sub
args = "F:\my folder\helloworld.py" 행에서 세 개의 따옴표를 사용해야만 작동합니다.args = "F:\my folder\helloworld.py"과 같은 일반 따옴표만 사용하면 프로그램이 작동하지 않습니다.그 이유는 경로(내 폴더)에 공간이 있기 때문입니다.경로에 공백이 있는 경우 VBA에서는 세 개의 따옴표를 사용해야 합니다.
이 코드는 동작합니다.
your_path= ActiveWorkbook.Path & "\your_python_file.py"
Shell "RunDll32.Exe Url.Dll,FileProtocolHandler " & your_path, vbNormalFocus
액티브 워크북경로는 워크북의 현재 디렉터리를 반환합니다.shell 명령어는 Windows 쉘을 통해 파일을 엽니다.
또한 ExcelPython을 사용해 볼 수 있습니다.ExcelPython은 Python 오브젝트와 VBA로부터의 호출 코드를 조작할 수 있습니다.
이것을 시험해 보세요.
retVal = Shell("python.exe <full path to your python script>", vbNormalFocus)
<full path to your python script>
''」를 해 주세요.
창이 깜박이고 아무 일도 하지 않고 사라지는 이유를 궁금해 하는 사람들에게 이 문제는 Python 스크립트의 RETAL 경로와 관련이 있을 수 있습니다. 예를 들어 "를 사용하셨습니다.\." Python 스크립트와 Excel Workbook이 같은 디렉토리에 있어도 Current Directory는 다를 수 있습니다.절대 경로로 변경하기 위해 코드를 수정하지 않을 경우.python 스크립트를 실행하기 전에 현재 Excel 디렉토리를 변경하기만 하면 됩니다.
ChDir ActiveWorkbook.Path
예를 들어 보겠습니다.플래시가 표시될 경우 가장 먼저 확인해야 할 문제의 1개는 Current Working Directory입니다.
ChDir "가 저의 해결책이었습니다.WORD의 vba를 사용하여 python3 스크립트를 실행합니다.
저 같은 경우에는 ms 액세스 문서와는 다른 디렉토리에 스크립트를 가지고 있고, 그 스크립트에서는 다른 스크립트에서 변수를 Import하기 때문에 먼저 디렉토리를 변경해야 합니다.그러면 셸 기능을 올바르게 사용할 수 있습니다.
ChDir "C:\Users\directory_where_the_script_is"
Call Shell("C:\Users\...\python.exe " & "your_script_name.py", 1)
RetVal = Shell(" & ActiveWorkBook)이 작동하지 않습니다.경로 & "< python script name >"
저에겐 다음과 같습니다.
RetVal = 셸("python3" & " & " C:\a\b\c\xyz.py")
위의 답변에는 치명적인 문제가 있다고 생각합니다.
후 " " "cmd
이치노출력이 예상과 다를 경우 디버깅 정보가 전혀 없습니다. 나는 더 좋은 , 그 cmd
창이 열린 채로 모든 정보가 표시됩니다(print
python) 및error log
.
코드:
Sub RunPythonScript()
cwd = ActiveWorkbook.Path 'current working directory
workbookName = ActiveWorkbook.Name
pythonScriptName = "main.py"
workbookNameWithPath = cwd & "\" & workbookName
pythonScriptNameWithPath = cwd & "\" & pythonScriptName
pythonExePath = "C:\Users\USERNAME\AppData\Local\Programs\Python\Python39\python.exe" ' change path as output of "where python"
Shell "cmd.exe /k """"" & pythonExePath & """ """ & pythonScriptNameWithPath & """""", vbNormalFocus
End Sub
다른 사용자가 이 문제에 직면했을 경우 스크립트에 상대 경로 참조가 포함되어 있지 않은지 확인하십시오.VBA에서 실행할 경우 이 참조가 작동하지 않습니다.
언급URL : https://stackoverflow.com/questions/18135551/how-to-call-python-script-on-excel-vba
'programing' 카테고리의 다른 글
클리어픽스란? (0) | 2023.04.19 |
---|---|
RE 오류: Mac OS X에서 잘못된 바이트 시퀀스 (0) | 2023.04.19 |
Bash를 사용하는 가장 좋아하는 명령줄 트릭은 무엇입니까? (0) | 2023.04.19 |
ToList()를 호출할 때 퍼포먼스에 영향이 있습니까? (0) | 2023.04.19 |
sep=";" 문이 XSL에서 생성된 CSV 파일에서 utf8 BOM을 차단합니다. (0) | 2023.04.14 |