본문 바로가기
Python/xlwings

xlwings RuntimeError: The workbook is already opened 해결하기

by PySun 2024. 11. 28.
반응형

소개

xlwings를 사용하다 보면 가끔 'RuntimeError: The workbook is already opened'라는 오류를 마주칠 수 있습니다. 이 오류는 주로 열린 워크북에 대해 작업을 시도할 때 발생합니다. 때로는 실수로 같은 워크북을 여러 번 열려 할 때 이 문제가 발생할 수 있는데요, 이번 블로그에서는 이러한 오류가 어떻게 발생하는지, 그리고 이를 해결하는 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'RuntimeError: The workbook is already opened' 에러가 발생할 수 있는 간단한 예시 코드를 살펴볼까요?

import xlwings as xw

# 이미 열린 워크북에 접근 시도
workbook = xw.Book('example.xlsx')
workbook2 = xw.Book('example.xlsx')  # 같은 파일을 두번째로 열려 함

에러 해결 방법

1. 열린 워크북 확인 후 접근하기

첫 번째로, 현재 열려 있는 워크북을 확인하고 이미 열려 있는 워크북에 접근하는지 확인해보세요. 이를 통해 중복 열기를 방지할 수 있습니다.

import xlwings as xw

# 열린 모든 워크북 가져오기
opened_workbooks = xw.books

# 현재 열린 워크북 중에서 필요한 워크북을 찾는다
for workbook in opened_workbooks:
    if workbook.name == 'example.xlsx':
        print("워크북이 이미 열려 있습니다:", workbook)
        break
else:
    # 워크북이 열려 있지 않은 경우 새로 연다
    workbook = xw.Book('example.xlsx')

2. 워크북 닫기 및 새로 열기

만약 특정 워크북을 닫지 못하고 열기를 원할 경우, 이미 열려 있는 워크북을 닫고 다시 열어보는 방법도 있습니다.

import xlwings as xw

# 열린 모든 워크북 가져오기
opened_workbooks = xw.books

# 해당 워크북 닫기
for workbook in opened_workbooks:
    if workbook.name == 'example.xlsx':
        workbook.close()
        print("워크북을 닫았습니다.")

# 워크북 새로 열기
new_workbook = xw.Book('example.xlsx')

마무리

이번 글에서는 xlwings에서 발생하는 'RuntimeError: The workbook is already opened' 오류에 대한 해결 방법을 살펴보았습니다. 열린 워크북을 점검하고 중복 열기를 피하거나, 필요한 경우 워크북을 닫고 다시 여는 방법을 활용하여 이 문제를 해결할 수 있습니다. 항상 코드를 작성할 때는 열린 파일 상태를 점검하는 것이 중요하다는 점, 잊지 마세요!

반응형