openpyxl 사용 예제

openpyxl을 이용하여 엑셀 파일에서 데이터를 한 줄씩 읽으면서 배열에 담는 코드를 만들었다. 배열에 담을 때 첫번째 열에는 1부터 시작하는 순번을 삽입하도록 했다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import openpyxl as xl

wb = xl.load_workbook('./excel/OO아파트 과거시세.xlsx')
ws = wb['과거시세']

sheetrows = []
i = 0
idx = 1

for row in ws.values:
    row.insert(0, idx)
    sheetrows.insert(i, row)
    i += 1
    idx += 1

하지만 실행을 하면 아래와 같은 오류가 발생한다. 

AttributeError: 'tuple' object has no attribute 'insert'

왜 그럴까? 이유는 ws.values에서 뽑아낸 자료형이 tuple이기 때문이다. tuple은 값을 바꿀 수 없다. 그러므로 각 row의 첫번째 열에는 순번을 넣을 수 없다. 
순번을 넣으려면 tuple을 list로 변환해야 한다. list는 값을 수정하거나 삭제할 수 있는 자료형이기 때문이다. 이런 경우 tuple을 list로 변환하는 함수를 사용하면 쉽게 처리할 수 있었다. 

1
2
3
4
5
6
for row in ws.values:
    tmpList = list(row)
    tmpList.insert(0, idx)
    sheetrows.insert(i, tmpList)
    i += 1
    idx += 1

꺼내고, 새로운 자료형에 넣고, 다시 첫 열에 값을 삽입하는 동작을 루프만큼 반복하도록 했다. 과연 최선일까? 

댓글 쓰기

0 댓글