개발/PYTHON-OPENPYXL

파이썬 엑셀 데이터 추출 - openpyxl 활용

Aireee 2022. 8. 13. 11:24
300x250
반응형

최근 파이썬 프로젝트 진행에서 엑셀문서를 읽어들여 데이터를 추출해야 하는 경우가 많아 엑셀문서를 리스트로 저장하는 함수를 만들어서 주로 재사용하는 편이다. 해당 함수에는 openpyxl 을 필요로 한다.

import openpyxl

def excelToList(file, sheetname):
    w = openpyxl.load_workbook(file)
    s = w[sheetname]
    mr = s.max_row
    mc = s.max_column
    arr = []
    
    for n in range(0, mr):
    	tmp = []
        a = n + 1
        for m in range(0, mc):
        	b = m + 1
            v = s.cell(row = a, column = b).value
            tmp.append(v)
        arr.append(tmp)
    return arr
    
// 사용 예시
arr = excelToList("excel.xlsx", "Sheet1")

가장 먼저 해야 할 것은 openpyxl 을 import 하는 것이다. xlsx 를 읽거나 만드는데 아주 유용한 모듈이다. 

엑셀 데이터를 가져오는 경우, 달라지는 것들은 보통 파일명과 시트명이므로, 파일명과 시트명으로 데이터를 읽어들이는 방식을 사용했다. 만약 파일명이나 시트명이 달라진다면 제대로 파일의 내용을 불러오지 못할 수 있다. 범용적으로 사용하는 경우라면 이것으로 충분하지 않겠지만, 지금의 나는 이것으로도 충분한 상황이라, 아직 여기에 머물러 있을 뿐.

가장 먼저 해야 하는 것은 파일을 읽어 들여 내용을 저장하는 것이다. 다음과 같이 말이다. w = openpyxl.load_workbook(file) 나는 w 라는 변수에 내용을 저장했다. 그리고 w 안에 특정 시트 즉 w[sheetname] 만 s 라는 배열에 따로 저장한 뒤, 시트안에서 최대 행, 열 을 구한다. 행 열 구하는 건 정말로 간단하다. s.max_row 와 s.max_column 이라는 명령어면 충분하다. 

이제는 내부 데이터를 배열에 저장하기 위해 arr 이라는 배열을 생성해 놓고, 최대 행만큼 반복한다. 그리고 각 행에서 최대 행만큼 또 반복하여 각 칸의 내용을 저장하는 것이다. openpyxl 에서 셀의 위치 값은 1 부터 시작하기 때문에 해당 행 또는 열의 숫자에 1 을 더해주었다. tmp 변수는 각 열의 데이터를 하나로 묶기위에 사용되었다. 

더 쉽고 좋은 방법이 있다면, 저에게 알려주세요. 

 

반응형