xlwings 오류 해결하기: RuntimeError: Excel is busy, try again later
소개
xlwings를 사용하다 보면 occasionally 'RuntimeError: Excel is busy, try again later'라는 오류를 접할 수 있습니다. 이 오류는 Excel 애플리케이션이 다른 작업을 수행 중이기 때문에 xlwings가 명령을 실행할 수 없다는 것을 의미합니다. 이 블로그에서는 이 오류의 원인과 해결 방법을 자세히 살펴보겠습니다.
에러 발생 예시 코드
먼저, 'RuntimeError: Excel is busy, try again later' 오류가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다.
import xlwings as xw
# 새로운 엑셀 애플리케이션 열기
app = xw.App(visible=True)
# 새로운 워크북 생성
wb = app.books.add()
# 셀에 값 작성
wb.sheets[0].range('A1').value = 'Hello, Excel!'
# 엑셀 애플리케이션이 바쁘게 작업 중일 때 다시 시도
wb.sheets[0].range('A2').value = 'Error: Excel is busy!'
에러 해결 방법
1. Excel 프로세스가 완료되기까지 기다리기
가장 간단한 해결책은 엑셀이 현재 작업을 마칠 때까지 기다리는 것입니다. 여러 작업을 동시에 실행하고 있다면, 잠시 후에 재시도 하는 방법을 사용할 수 있습니다. 다음과 같이 코드를 수정해 보세요.
import time
import xlwings as xw
app = xw.App(visible=True)
wb = app.books.add()
wb.sheets[0].range('A1').value = 'Hello, Excel!'
# 엑셀이 바쁠 경우 잠시 대기 후 다시 시도
try:
wb.sheets[0].range('A2').value = 'Attempting to write again...'
except RuntimeError as e:
print(str(e))
time.sleep(5) # 5초 대기
wb.sheets[0].range('A2').value = 'Success after wait!'
2. 자동 모드 비활성화하기
Excel의 자동 계산 모드가 활성화되어 있을 때도 이러한 오류가 발생할 수 있습니다. 이 경우 Excel의 수식을 수동 모드로 변경하거나 자동 계산을 비활성화 해보세요.
import xlwings as xw
app = xw.App(visible=True)
wb = app.books.add()
# 수동 모드로 변경
app.api.Calculation = -4105 # xlCalculationManual
wb.sheets[0].range('A1').value = 'Hello, Excel!'
wb.sheets[0].range('A2').value = 'Running in manual mode!'
3. Excel 프로세스가 중복 실행되었는지 확인하기
종종 Excel 애플리케이션이 중복으로 실행되거나 다른 프로세스가 엑셀을 점유하고 있어 문제가 발생합니다. 이러한 경우, 작업 관리자를 통해 필요 없는 Excel 프로세스를 종료해 보세요.
마무리
이번 블로그 글에서는 xlwings에서 'RuntimeError: Excel is busy, try again later' 오류를 해결하는 몇 가지 방법을 알아보았습니다. 프로세스 완료 대기, 자동 모드 비활성화, 중복된 Excel 프로세스 점검 등 다양한 방법으로 이 오류를 극복할 수 있습니다. 항상 엑셀과 같은 외부 애플리케이션을 사용할 때는 마주칠 수 있는 오류에 대비하고, 문서와 예제를 참조하여 문제를 해결하세요.