1. 파이썬에서 엑셀 사용하기
파이썬에서 엑셀 데이타를 핸들링하기 위해서는 openpyxl, xlrd, xlrw 등의 외부 패키지를 설치해서 사용한다. 여기서는 openpyxl 패키지를 아래와 같이 설치하여 사용한다.
pip install openpyxl
2. 엑셀 데이타 읽고 쓰기
엑셀을 다루는 가장 기초적인 부분은 데이타를 읽고 쓰는 동작이므로, 먼저 엑셀 파일을 열고 그 안의 데이타를 읽고 몇 개의 데이타를 쓰는 동작을 살펴 보자. 아래 예제는 국영수 점수를 담은 엑셀 파일을 읽어 각 학생별 국영수 합계를 구하여 다시 저장하는 예이다. 엑셀 입력 파일은 아래와 같다고 가정한다. 합계 부분은 추가해야 하는 부분이다.
import openpyxl # 엑셀파일 열기 wb = openpyxl.load_workbook('score.xlsx') # 현재 Active Sheet 얻기 ws = wb.active # ws = wb.get_sheet_by_name("Sheet1") # 국영수 점수를 읽기 for r in ws.rows: row_index = r[0].row # 행 인덱스 kor = r[1].value eng = r[2].value math = r[3].value sum = kor + eng + math # 합계 쓰기 ws.cell(row=row_index, column=5).value = sum print(kor, eng, math, sum) # 엑셀 파일 저장 wb.save("score2.xlsx") wb.close()
먼저 엑셀 파일을 오픈하기 위해 openpyxl.load_workbook(엑셀파일명) 함수를 호출하여 Workbook 객체를 얻는다. 하나의 Workbook에는 여러 개의 Worksheet 들이 있는데 통상 엑셀은 기본으로 Sheet1, Sheet2, Sheet3 등 3개의 시트를 생성한다. 엑셀 파일을 열면 보통 첫번째 시트가 Active Sheet가 되므로 Worksheet 객체의 active 를 통해 현재 워크시트를 가져올 수 있지만, 엑셀은 이전 저장시 마지막에 선택된 시트를 Active Sheet로 하므로 wb.get_sheet_by_name(시트명) 을 사용하는 것이 더 안전하다.
워크시트는 행(Row)과 열(Column)로 구성되어 있는데, 시트 내에 데이타가 있는 부분의 행들은 시트객체.rows 를 통해 엑세스할 수 있고, 마찬가지로 시트객체.columns는 유효 컬럼들을 엑세스하는데 사용한다. 위의 예제에서 각 행을 하나씩 가져오기 위해 for 루프로 ws.rows로부터 한 row씩 가져오고 있다. 각 row는 그 행 안에 있는 cell 들의 집합으로 처음 cell은 r[0]과 같이 인덱스 0을 사용한다. 첫 cell 즉 r[0]의 값을 리턴하기 위해 r[0].value 을 사용한다.
특정 cell 에 값을 지정하기 위해 cell.value 에 값을 넣으면 되는데, 시트에서 cell을 지정하기 위해 ws["A1"]과 같이 엑셀식 cell 지정법을 사용할 수 있고, 또한 행열 인덱스를 사용하여 ws.cell(row=행인덱스, column=열인덱스) 표현을 사용할 수도 있다.
엑셀의 변경 내용을 저장하기 위해서는 Workbook 객체에서 save() 메서드를 사용하며, 엑셀 사용이 모두 끝난 경우 close() 메서드를 호출한다.