source

Python으로 Excel 외부 데이터 새로 고침

manysource 2023. 6. 14. 21:55

Python으로 Excel 외부 데이터 새로 고침

파이썬 스크립트를 실행하는 엑셀 파일이 있습니다.Excel 파일에 Python 스크립트를 실행하기 전에 새로 고쳐야 하는 외부 데이터 연결이 있습니다.제가 언급하는 기능은 다음과 같습니다.

Refresh External Data

저는 Python 2.7을 사용하고 있으며 대부분의 Excel 데이터 구문 분석을 Pandas에 의존하고 있습니다.

CalculateAsyncQueryDone()이 프로그램을 유지하고 새로 고침이 완료될 때까지 기다립니다.

xlapp = win32com.client.DispatchEx("Excel.Application")
wb = xlapp.Workbooks.Open(<path_to_excel_workbook>)
wb.RefreshAll()
xlapp.CalculateUntilAsyncQueriesDone()
wb.Save()
xlapp.Quit()

만약 당신이 윈도우에 있고 스크린샷이 주어진다면, 당신은 사용할 수 있습니다.win32com모듈.파이썬에서 Excel을 열고 워크북을 로드하고 모든 데이터 연결을 새로 고친 다음 종료할 수 있습니다.구문은 결국 VBA에 상당히 가깝습니다.

설치하는 것이 좋습니다.pypiwin32via pip (pip install pypiwin32).

import win32com.client

# Start an instance of Excel
xlapp = win32com.client.DispatchEx("Excel.Application")

# Open the workbook in said instance of Excel
wb = xlapp.workbooks.open(<path_to_excel_workbook>)

# Optional, e.g. if you want to debug
# xlapp.Visible = True

# Refresh all data connections.
wb.RefreshAll()
wb.Save()

# Quit
xlapp.Quit()

첫 번째 Google 링크이기 때문에 이 링크를 추가하면 첫 번째 답변의 코드가 작동했지만 대문자가 잘못되어 다음과 같습니다.

import win32com.client
import time

xlapp = win32com.client.DispatchEx("Excel.Application")
wb = xlapp.Workbooks.Open(<path_to_excel_workbook>)
wb.RefreshAll()
time.sleep(5)
wb.Save()
xlapp.Quit()

작은 노트지만 중요한 노트입니다.위의 모든 코드는 맞지만 파일이 저장되어 있을 뿐 닫히지 않기 때문에 Err 13 권한으로 문제가 발생합니다.

저장 후 wb.Close()를 추가합니다. 그렇지 않으면 열려 있는 Excel이 백그라운드 앱에 남아 있고, 500개를 사용하면 문제가 발생할 수 있습니다.

다른 사람들이 말한 것 외에도 코드가 종료 줄에 도달했을 때 저장 대화 상자가 계속 표시되었습니다.디스플레이를 설정경고 플래그가 false로 표시되어 문제가 해결되었습니다.저도 수면 타이머가 필요 없었어요.이것이 저에게 도움이 되었습니다.

xlapp = win32com.client.DispatchEx("Excel.Application")
wb = xlapp.Workbooks.Open(<path_to_excel_workbook>)
wb.RefreshAll()
xlapp.CalculateUntilAsyncQueriesDone()
xlapp.DisplayAlerts = False
wb.Save()
xlapp.Quit()

제가 이것에 당황했고 어떤 해결책도 효과가 없었기 때문에 약간 바뀐 대답을 추가했습니다.제게 효과가 있었던 것은Xlsx.DisplayAlerts = True그리고.Xlsx.Visible = True그리고 마침내 책을 저장합니다.book.Save()저장과 함께 닫기도 합니다.book.Close(SaveChanges=True).

엑셀을 매번 열고 닫는 것이 조금 번거롭지만(여러 엑셀 파일을 반복하고 있습니다), 작동이 잘 됩니다.

import win32com.client as win32
import pythoncom

def open_close_as_excel(file_path):
    try:
        pythoncom.CoInitialize()
        Xlsx = win32.DispatchEx('Excel.Application')
        Xlsx.DisplayAlerts = True
        Xlsx.Visible = True
        book = Xlsx.Workbooks.Open(file_path)
        book.RefreshAll()
        Xlsx.CalculateUntilAsyncQueriesDone()
        book.Save()
        book.Close(SaveChanges=True)
        Xlsx.Quit()
        pythoncom.CoUninitialize()

        book = None
        Xlsx = None
        del book
        del Xlsx
        print("-- Opened/Closed as Excel --")

    except Exception as e:
        print(e)

    finally:
        # RELEASES RESOURCES
        book = None
        Xlsx = None

기존 솔루션을 사용할 때 발생한 다양한 오류를 바탕으로 보다 완벽한 답변을 다시 게시합니다.

# Open an Instance of Application
xlapp = win32com.client.DispatchEx("Excel.Application") 

# Open File
Workbook = xlapp.Workbooks.Open(<path+file name>) 

# Refresh all  
Workbook.RefreshAll()

# Wait until Refresh is complete
xlapp.CalculateUntilAsyncQueriesDone()

# Save File  
Workbook.Save()

# Quit Instance of Application
xlapp.Quit() 

#Delete Instance of Application
del xlapp

언급URL : https://stackoverflow.com/questions/40893870/refresh-excel-external-data-with-python