xlwings 고장 제거

9219 단어 xlwingsPython
다음은 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 도매기로 만들면 입력 방정식의 셀에'객체 필요'가 표시됩니다.
원인·대응법
  • xlwings를 설치하지 않은 마운트 매크로→마운트 매크로
  • VBA의 참조 설정을 통해 xlwings에서 체크→체크하지 않습니다.호출 원본의 파일에 참조 설정이 있는지 확인합니다. (다른 파일에 참조 설정이 있는지 확인합니다.)
  • 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: 지정된 프로세스를 찾을 수 없습니다."


    현상.
    다음 환경에서 확인
  • OS: Windows 10 Pro
  • python: Anaconda3-2020.11
  • 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을 설치합니다.

    좋은 웹페이지 즐겨찾기