본문 바로가기
Python/xlwings

xlwings TypeError: unhashable type: 'dict' 오류 해결하기

by PySun 2024. 12. 20.
반응형

소개

xlwings를 사용하다 보면 'TypeError: unhashable type: 'dict''라는 오류가 발생할 수 있습니다. 이 오류는 주로 딕셔너리를 키로 사용하려 할 때 발생하게 됩니다. 딕셔너리의 특성상 해시 가능한 타입이 아니기 때문에 다음과 같은 에러가 발생합니다. 이 글에서는 이 오류의 원인과 그 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'TypeError: unhashable type: 'dict'' 에러가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다.

import xlwings as xw

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

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

# 시트에 딕셔너리 데이터 추가
data = {
    'A1': 'Hello',
    'B1': 'World'
}

# TypeError 발생: dict가 해시 불가능합니다
workbook.sheets[0].range('A1').value = data

에러 해결 방법

1. 딕셔너리를 변환하여 사용하라

엑셀의 셀에 값을 할당할 때, 직접적인 딕셔너리 객체를 사용하는 대신 딕셔너리의 값을 리스트 형태 또는 별도의 두 개의 리스트로 변환하여 입력하는 것이 좋습니다.

import xlwings as xw

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

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

# 딕셔너리 데이터를 리스트로 변환
data = {
    'A1': 'Hello',
    'B1': 'World'
}

# 리스트의 형식으로 값 입력
workbook.sheets[0].range('A1').value = list(data.values())

2. 셀 범위를 지정하여 여러 값 한 번에 입력하기

또는 딕셔너리의 키와 값을 이중 리스트 형태로 변환하여 셀 범위에 입력할 수도 있습니다. 이렇게 하면 엑셀에 여러 값을 한 번에 입력할 수 있습니다.

import xlwings as xw

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

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

# 딕셔너리 데이터를 이중 리스트로 변환
data = {
    'A1': 'Hello',
    'B1': 'World'
}

# 데이터의 키와 값을 이중 리스트 형태로 변환하여 입력
workbook.sheets[0].range('A1').value = [[key, value] for key, value in data.items()]

마무리

이 글에서는 xlwings 사용 시 발생할 수 있는 'TypeError: unhashable type: 'dict'' 오류와 그 해결 방법을 살펴보았습니다. 딕셔너리를 직접적으로 엑셀의 셀에 입력하는 대신, 리스트 형태로 변환하여 사용하는 방법으로 이러한 오류를 해결할 수 있습니다. 항상 코딩하면서 에러를 겪게 되면 실망할 수 있지만, 그 경험을 통해 더욱 성장할 수 있습니다. 고민할 시간보다 해결할 방법을 찾아보는 것이 중요합니다!

반응형