본문 바로가기
Python/xlwings

xlwings ValueError: Expected a 2D array, got 1D array instead 오류 해결하기

by PySun 2024. 12. 19.
반응형

소개

xlwings를 사용할 때 'ValueError: Expected a 2D array, got 1D array instead' 에러가 발생하는 경우가 종종 있습니다. 이 오류는 주로 엑셀에 데이터를 넣거나 가져올 때 데이터 구조가 2차원 형태여야 하는데 이를 1차원 배열로 제공할 때 발생합니다. 이번 블로그 글에서는 이 오류의 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 이 오류가 발생할 수 있는 간단한 예제 코드를 살펴보겠습니다.

import xlwings as xw

# 새로운 엑셀 애플리케이션 생성
app = xw.App(visible=True)
wb = app.books.add()
sheet = wb.sheets[0]

# 1D 배열로 데이터 추가
data = [1, 2, 3, 4, 5]
sheet.range("A1").value = data

에러 해결 방법

1. 데이터를 2D 배열로 변환하기

xlwings에서는 데이터를 2D 배열 형태로 엑셀 시트에 삽입해야 합니다. 따라서 데이터를 1D 배열에서 2D 배열로 바꾸어야 합니다.

import xlwings as xw

# 새로운 엑셀 애플리케이션 생성
app = xw.App(visible=True)
wb = app.books.add()
sheet = wb.sheets[0]

# 2D 배열로 데이터 추가
data = [[1], [2], [3], [4], [5]]  # 각 요소를 리스트로 감싸기
sheet.range("A1").value = data

2. 단일 행 또는 단일 열의 데이터 입력

만약 단일 행 또는 단일 열로 데이터를 작성하고자 한다면, 리스트 안에 리스트를 구조로 만들거나 NumPy를 사용할 수 있습니다.

import xlwings as xw
import numpy as np

# 새로운 엑셀 애플리케이션 생성
app = xw.App(visible=True)
wb = app.books.add()
sheet = wb.sheets[0]

# 단일 행 데이터 추가
row_data = np.array([[1, 2, 3, 4, 5]])  # 단일 행 2D 배열
sheet.range("A1").value = row_data

마무리

이번 블로그 글에서는 xlwings를 사용할 때 발생할 수 있는 'ValueError: Expected a 2D array, got 1D array instead' 에러의 원인과 해결 방법을 살펴보았습니다. 데이터를 2D 배열 형태로 변환하거나, 단일 행 또는 열 데이터로 작성함으로써 이러한 오류를 극복할 수 있습니다. xlwings를 사용할 때는 데이터 형식을 항상 체크하고, 엑셀에 데이터를 삽입할 때 올바른 구조를 사용하는 것이 중요합니다.

반응형