본문 바로가기
Python/xlwings

xlwings RuntimeError: The workbook has been closed 오류 해결하기

by PySun 2024. 12. 4.
반응형

소개

xlwings를 사용하다가 'RuntimeError: The workbook has been closed'라는 오류를 만나는 적이 있나요? 이 오류는 다양한 이유로 발생할 수 있습니다. 종종 사용자가 워크북을 닫았거나, xlwings가 연결된 엑셀 인스턴스가 예기치 않게 종료되었을 때 이러한 문제가 발생하곤 합니다. 이 블로그 글에서는 이 오류의 원인과 해결 방법에 대해 자세히 알아보겠습니다.

에러 발생 예시 코드

먼저, 'RuntimeError: The workbook has been closed' 오류가 발생할 수 있는 간단한 예제 코드를 살펴보겠습니다.

import xlwings as xw

# 새로운 엑셀 애플리케이션 열기
app = xw.App(visible=True)

# 새로운 워크북 생성
workbook = app.books.add()

# 워크북을 닫음
workbook.close()

# 닫힌 워크북에 접근 시도
sheet = workbook.sheets['Sheet1']
print(sheet.range('A1').value)

에러 해결 방법

1. 워크북 상태 확인하기

가장 먼저, 코드를 실행하기 전에 워크북이 여전히 열려있는지 확인해야 합니다. 만약 워크북을 닫았다면, 접근할 수 없습니다.

import xlwings as xw

# 엑셀 애플리케이션 열기
app = xw.App(visible=True)

# 새로운 워크북 생성
workbook = app.books.add()

# 작업 완료 후 워크북을 닫기 전에 열려있음을 확인
try:
    sheet = workbook.sheets['Sheet1']
    print(sheet.range('A1').value)
except RuntimeError as e:
    print("워크북이 닫혔습니다:", e)

# 작업이 끝나면 워크북을 닫는다
workbook.close()

2. 예외 처리 사용하기

예외 처리 구조가 있는 경우, 워크북이 닫혔을 때 대처할 수 있습니다. 이를 통해 오류 발생 시 사용자에게 안내 메시지를 전달할 수 있습니다.

import xlwings as xw

try:
    # 엑셀 애플리케이션 열기
    app = xw.App(visible=True)

    # 새로운 워크북 생성
    workbook = app.books.add()
    
    # 워크북을 닫음
    workbook.close()

    # 닫힌 워크북에 접근 시도
    sheet = workbook.sheets['Sheet1']

except RuntimeError:
    print("오류 발생: 워크북이 이미 닫혔습니다.")
finally:
    app.quit()  # 애플리케이션 종료

마무리

이 블로그 글에서는 xlwings에서 발생하는 'RuntimeError: The workbook has been closed' 오류에 대한 원인과 해결 방법을 살펴보았습니다. 워크북의 상태를 항상 확인하고, 예외 처리를 통해 안전하게 코드 실행을 유지하는 것이 중요합니다. xlwings와 함께 작업할 때는 엑셀 애플리케이션이 올바르게 실행되고 있는지 지속적으로 점검하는 것이 좋습니다.

반응형