최근 파이썬 프로젝트 진행에서 엑셀문서를 읽어들여 데이터를 추출해야 하는 경우가 많아 엑셀문서를 리스트로 저장하는 함수를 만들어서 주로 재사용하는 편이다. 해당 함수에는 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 변수는 각 열의 데이터를 하나로 묶기위에 사용되었다.
더 쉽고 좋은 방법이 있다면, 저에게 알려주세요.
'개발 > PYTHON-OPENPYXL' 카테고리의 다른 글
파이썬 데이터 엑셀저장 - openpyxl 활용 (0) | 2022.08.15 |
---|---|
파이썬 Openpyxl 설치 및 기본 사용법 (0) | 2022.03.02 |