xlwings 고장 제거
컴파일 오류: 정의되지 않은 Sub 또는 Function
현상.
공식 문서에 따라 RunPython
함수를 실행하려면 "컴파일 오류: Sub 또는 Function이 정의되지 않았습니다."에 대한 오류 메시지가 표시됩니다.
원인·대응법
이유는 RunPython
함수가 정의되지 않았기 때문입니다.
xlwings를 설치하여 매크로를 불러오고 xlwings를 RunPython
함수 호출원 Excel본의 참고 설정에 추가하면 RunPython
함수를 사용할 수 있습니다.RunPython
함수를 사용할 때 다른 사람들도 이해할 수 있도록 매크로에 정의된 함수를 표시하는 것이 좋습니다.
함수 호출 원서의 모듈Sub HelloWorld()
xlwings.RunPython ("import hello; hello.world()")
End Sub
(참고 설정이 필요한 것은 RunpPython가 아니라 다른 곳에 쓰여 있어서 이해하기 어렵다.왜 추천독립 아론의 로드 매크로한 글e.g. 1,e.g. 2,e.g. 3많은데 정식 문서가 안 좋아서 이해했어요.)
필요 대상
현상.@xw.sub
도매기로 UDF(사용자정의 함수)를 만들면 팝업에 표시되고@xw.func
도매기로 만들면 입력 방정식의 셀에'객체 필요'가 표시됩니다.
원인·대응법
Sub HelloWorld()
xlwings.RunPython ("import hello; hello.world()")
End Sub
현상.
@xw.sub
도매기로 UDF(사용자정의 함수)를 만들면 팝업에 표시되고@xw.func
도매기로 만들면 입력 방정식의 셀에'객체 필요'가 표시됩니다.원인·대응법
UDF의 반환 값은 0 & 디버깅할 수 없습니다
현상.
UDF의 반환 값은 0입니다.화면 디버깅도 못하고.
원인·대응법Application.CommandBars("Standard").Controls(1).Enabled
의 값이 True
이고 xlwings_udfs
모듈의 VBA 함수(Python 함수의 잠금 메모리)의 첫 줄의 IF 문장에서 끝Exit Function
이기 때문이다.
xlwings_udfs 모듈Function hello(name)
If (Not Application.CommandBars("Standard").Controls(1).Enabled) Then Exit Function
#If App = "Microsoft Excel" Then
If TypeOf Application.Caller Is Range Then On Error GoTo failed
hello = Py.CallUDF("test", "hello", Array(name), ThisWorkbook, Application.Caller)
Exit Function
#Else
hello = Py.CallUDF("test", "hello", Array(name))
Exit Function
#End If
failed:
hello = Err.Description
End Function
적절한 브레이크에서 VBA를 중지하고 창에서 다음을 수행합니다.
기본 창Application.CommandBars("Standard").Controls(1).Enabled = True
Application.CommandBars("Standard").Controls(1)
는 Excel 2003 이전의 표준 도구 모음(설명은 링크 대상의 새 단추입니다.나는 Application.CommandBars("Standard").Controls(1).Enabled
의 값을 True
로 설정하는 것은 해가 없다고 생각한다. 대략.왜 xliwngs의 UDF 최초의 IF문에서 이걸 사용했는지 아직 잘 모르겠습니다.
"다른 프로그램에서 OLE 작업이 완료될 때까지 대기합니다."
현상.
xlwings에서 처리를 실행할 때 Excel은 "다른 프로그램에서 OLE의 작업이 끝날 때까지 기다립니다"라는 정보를 표시합니다.사라진 후 시간이 지나면 다시 나타날 것이다.
원인·대응법
Excel에서 다른 프로세스로 호출하는 데 시간이 걸렸기 때문입니다.이 경고 메시지는 일정 시간이 지나면 표시됩니다.
UDF의 경우 다음 호출 전에 수행Application.DisplayAlerts=False
합니다.Function vba_hogehoge()
Application.DisplayAlerts = False
call hogehoge 'xlwingsで定義したUDF
Application.DisplayAlerts = True
End Function
「EOFError: Ran out of input when using Python」
현상.
xlwings를 가져오려고 하면 이 오류가 표시됩니다.매크로를 로드하는 설치xlwings addin install
와 UDF도 사용할 수 없습니다.
원인·대응법
왜냐하면 %userprofile%\AppData\Local\Temp\gen_py\3.x\dicts.dat
(3.x는 파이톤의 버전)의 파일 크기가 0바이트이기 때문이다.리소스 매니저 또는 다음 명령으로 폴더gen_py
를 삭제하면 오류가 표시되지 않습니다.
Powershell> Remove-Item --recursive $env:USERPROFILE\Appcata\Local\Temp\gen_py
리본에 xlwings 탭이 표시되지 않음
현상.
xlwings의 마운트 매크로가 설치되어 있지만, 리본에 xlwings 라벨이 표시되지 않습니다.
원인·대응법
숨겨진 Excel 프로세스(좀비 프로세스)가 여전히 존재하기 때문입니다.Ctrl+Shift+Esc
에서 임무 관리자를 시작하고 백그라운드에서 처리된 Excel을 마우스 오른쪽 버튼으로 클릭하여 임무 종료를 완료합니다.
「could not load xlwings32-0.21.4.dll from either of the following folders」
현상.
xlwings 리본Import Functions
버튼을 누르면 "could not load xlwings 32-0.24.dll from eigher of the following folders"
의 오류입니다.
원인·대응법
설치된 xlwings 패키지의 버전과 xlwings가 매크로를 불러오는 버전이 다르기 때문입니다.
PowerShell에서 실행xlwings addin update
하고 로드 매크로를 업데이트합니다.
"ImportError: DLL load failed while importing win32api: 지정된 프로세스를 찾을 수 없습니다."
현상.
다음 환경에서 확인
Function hello(name)
If (Not Application.CommandBars("Standard").Controls(1).Enabled) Then Exit Function
#If App = "Microsoft Excel" Then
If TypeOf Application.Caller Is Range Then On Error GoTo failed
hello = Py.CallUDF("test", "hello", Array(name), ThisWorkbook, Application.Caller)
Exit Function
#Else
hello = Py.CallUDF("test", "hello", Array(name))
Exit Function
#End If
failed:
hello = Err.Description
End Function
Application.CommandBars("Standard").Controls(1).Enabled = True
현상.
xlwings에서 처리를 실행할 때 Excel은 "다른 프로그램에서 OLE의 작업이 끝날 때까지 기다립니다"라는 정보를 표시합니다.사라진 후 시간이 지나면 다시 나타날 것이다.
원인·대응법
Excel에서 다른 프로세스로 호출하는 데 시간이 걸렸기 때문입니다.이 경고 메시지는 일정 시간이 지나면 표시됩니다.
UDF의 경우 다음 호출 전에 수행
Application.DisplayAlerts=False
합니다.Function vba_hogehoge()
Application.DisplayAlerts = False
call hogehoge 'xlwingsで定義したUDF
Application.DisplayAlerts = True
End Function
「EOFError: Ran out of input when using Python」
현상.
xlwings를 가져오려고 하면 이 오류가 표시됩니다.매크로를 로드하는 설치xlwings addin install
와 UDF도 사용할 수 없습니다.
원인·대응법
왜냐하면 %userprofile%\AppData\Local\Temp\gen_py\3.x\dicts.dat
(3.x는 파이톤의 버전)의 파일 크기가 0바이트이기 때문이다.리소스 매니저 또는 다음 명령으로 폴더gen_py
를 삭제하면 오류가 표시되지 않습니다.
Powershell> Remove-Item --recursive $env:USERPROFILE\Appcata\Local\Temp\gen_py
리본에 xlwings 탭이 표시되지 않음
현상.
xlwings의 마운트 매크로가 설치되어 있지만, 리본에 xlwings 라벨이 표시되지 않습니다.
원인·대응법
숨겨진 Excel 프로세스(좀비 프로세스)가 여전히 존재하기 때문입니다.Ctrl+Shift+Esc
에서 임무 관리자를 시작하고 백그라운드에서 처리된 Excel을 마우스 오른쪽 버튼으로 클릭하여 임무 종료를 완료합니다.
「could not load xlwings32-0.21.4.dll from either of the following folders」
현상.
xlwings 리본Import Functions
버튼을 누르면 "could not load xlwings 32-0.24.dll from eigher of the following folders"
의 오류입니다.
원인·대응법
설치된 xlwings 패키지의 버전과 xlwings가 매크로를 불러오는 버전이 다르기 때문입니다.
PowerShell에서 실행xlwings addin update
하고 로드 매크로를 업데이트합니다.
"ImportError: DLL load failed while importing win32api: 지정된 프로세스를 찾을 수 없습니다."
현상.
다음 환경에서 확인
> Remove-Item --recursive $env:USERPROFILE\Appcata\Local\Temp\gen_py
현상.
xlwings의 마운트 매크로가 설치되어 있지만, 리본에 xlwings 라벨이 표시되지 않습니다.
원인·대응법
숨겨진 Excel 프로세스(좀비 프로세스)가 여전히 존재하기 때문입니다.
Ctrl+Shift+Esc
에서 임무 관리자를 시작하고 백그라운드에서 처리된 Excel을 마우스 오른쪽 버튼으로 클릭하여 임무 종료를 완료합니다.「could not load xlwings32-0.21.4.dll from either of the following folders」
현상.
xlwings 리본Import Functions
버튼을 누르면 "could not load xlwings 32-0.24.dll from eigher of the following folders"
의 오류입니다.
원인·대응법
설치된 xlwings 패키지의 버전과 xlwings가 매크로를 불러오는 버전이 다르기 때문입니다.
PowerShell에서 실행xlwings addin update
하고 로드 매크로를 업데이트합니다.
"ImportError: DLL load failed while importing win32api: 지정된 프로세스를 찾을 수 없습니다."
현상.
다음 환경에서 확인
현상.
다음 환경에서 확인
pip install
에서pywin 32를 업데이트할 때--force
추가 옵션이 xlwings를 업데이트한 경우) xlwings의 Excel에서 매크로를 불러오는 설치(xlwings addin install
를 포함할 때 상기 오류 메시지가 표시되며 마운트 매크로를 설치할 수 없습니다.원인·대응법
설치할 때pywin 32의 dll를 바꿀 수 없기 때문에 봉인과 dll 버전이 편차가 발생했습니다.PowerShell에서 실행
python c:\programdata\anaconda3\scripts\pywin32_postinstall.py --install
하여 패키지에 적합한 dll을 설치합니다.
Reference
이 문제에 관하여(xlwings 고장 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k_maki/items/099699e4313a5d61da01텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)