Advertisement
  1. Code
  2. Python

파이썬을 이용한 엑셀 문서 처리

Scroll to top
Read Time: 4 min

Korean (한국어) translation by Dae-yeop Lee (you can also view the original English article)

지금까지 여러분은 때때로 마이크로소프트 엑셀을 사용해 오셨을 것입니다. 엑셀은 스프레드시트, 표, 차트 등을 다룰 때 굉장히 강력합니다. 그런데 파이썬과 무슨 관계가 있을까요?

파이썬은 엑셀 관련 작업에서 발생할 수 있는 처리하기 곤란한 일들을 자동화할 수 있기 때문에 엑셀 파일을 처리하는 방식에 큰 변화를 가져올 수 있습니다. 예를 들어, 회사 예산에 관련된 수백 개의 스프레드시트에서 특정 정보를 찾아야 할 수 있습니다. 굉장히 곤란한 일이지 않을까요? 이 튜토리얼에서는 파이썬을 이용해 엑셀 문서 작업을 손쉽게 수행하는 방법을 보여드리겠습니다.

참, 컴퓨터에 마이크로소프트 엑셀이 설치돼 있지 않아도 걱정할 필요는 없습니다. 이번 튜토리얼을 진행하는 데는 LibreOffice CalcOpenOffice Calc 같은 대체재를 사용하셔도 됩니다.

그럼 시작해 봅시다!

OpenPyXL

OpenPyXL은 엑셀 2010의 xlsx/xlsm/xltx/xltm 파일을 읽고 쓰는 데 사용하는 라이브러리입니다. 이번 튜토리얼에서는 엑셀 문서를 처리하는 데 이 라이브러리를 사용할 것입니다.

이 라이브러리를 사용하기 위해 맨 먼저 해야 할 일은 OpenPyXL을 설치하는 것입니다.

OpenPyXL 설치

OpenPyXL을 설치하기 위해 여기서는 pip를 사용할 것입니다(위키피디아 참조).

파이썬으로 작성된 소프트웨어 패키지의 설치 및 관리에 사용되는 패키지 관리 시스템. 파이썬 패키지 인덱스(PyPI; Python Package Index)에서 각종 패키지를 찾을 수 있다.

pip를 설치하기 위해서는 파이썬 패키징 사용자 가이드(Python Packaging User Guide)에 언급된 단계를 따라할 수도 있지만 시스템에 설치된 파이썬 버전이 파이썬 2.7.9 이상 또는 파이썬 3.4 이상인 경우 이미 pip가 설치돼 있을 것입니다!

이제 (맥 OS X의 터미널에서) 다음 명령을 입력해서 OpenPyXL을 간단히 설치할 수 있습니다.

pip install openpyxl

엑셀 문서 열기

OpenPyXL을 설치하고 나면 엑셀 문서를 처리할 준비가 끝났습니다. 엑셀 문서를 대상으로 가장 먼저 해볼 작업은 해당 문서를 여는 것입니다. 튜토리얼을 실습하기 위해 sample.xlsx 엑셀 파일을 내려받거나 직접 엑셀 파일을 준비해도 됩니다.

OpenPyXL을 사용하려면 먼저 다음과 같이 OpenPyXL을 임포트해야 합니다.

import openpyxl

엑셀 문서를 여는 데 필요한 메서드는 load_workbook()입니다. 통합 문서(workbook)가 무슨 뜻인지 궁금하실 수 있는데 단순히 엑셀 스프레드시트 문서일 뿐입니다. 엑셀 문서를 여는 데 필요한 스크립트는 다음과 같습니다.

1
import openpyxl
2
excel_document = openpyxl.load_workbook('sample.xlsx')

이제 load_workbook() 메서드에서 반환한 타입을 봅시다. 다음과 같이 하면 됩니다.

print type(excel_document)

그럼 다음과 같은 내용이 출력됩니다.

1
<class 'openpyxl.workbook.workbook.Workbook'>

보다시피 반환된 객체는 workbook이라는 데이터 타입인 Workbook입니다. 여기서 Workbook 객체가 엑셀 파일을 나타냅니다.

시트 이름

엑셀의 시트(Sheet)는 열(A, B, C 등으로 시작하는 문자가 적힌)과 행(1, 2, 3 등으로 시작하는)으로 구성됩니다. 엑셀 문서에 어떤 시트가 들어있는지 확인하려면 다음과 같이 get_sheet_names() 메서드를 사용합니다.

excel_document.get_sheet_names()

위의 명령을 print하면 다음과 같은 결과가 출력됩니다.

[u'Sheet1']

즉, Sheet1이라는 시트 하나가 있음을 보여줍니다.

시트가 여러 개 있는 경우 get_sheet_by_name() 메서드를 사용해 이름으로 특정 시트에 접근할 수 있습니다.

셀에 접근하기

이제 엑셀 파일을 열고 시트를 가져오는 방법을 배웠으므로 시트에 있는 셀에 얼마나 쉽게 접근할 수 있는지 확인해 봅시다. 그러려면 해당 시트를 검색한 다음 셀의 위치(좌표)를 지정하기만 하면 됩니다. 엑셀 문서에서 A2행, 즉 A2에 접근하고 싶다고 해봅시다. 이를 다음과 같이 구현할 수 있습니다.

1
sheet = excel_document.get_sheet_by_name('Sheet1')
2
print sheet['A2'].value

이 경우 Abder라는 값이 반환됩니다.

행-열 표기법을 사용할 수도 있습니다. 예를 들어, 5행 2열에 위치한 셀에 접근하고 싶을 경우 다음과 같이 입력하면 됩니다.

sheet.cell(row = 5, column = 2).value

이 경우 programmer가 출력됩니다.

셀을 나타내는 객체 타입을 보고 싶다면 다음과 같이 입력하면 됩니다.

print type(sheet['A2'])

또는

print sheet.cell(row = 5, column = 2)

이 경우 다음과 같은 결과가 출력됩니다.

<class 'openpyxl.cell.cell.Cell'>

이는 해당 객체의 타입이 Cell이라는 뜻입니다.

셀의 범위에 접근하기

단 하나의 셀이 아니라 여러 셀에 접근하고 싶다면 어떻게 해야 할까요? 엑셀 문서에서 A1에서 B3까지의 셀에 접근하고 싶다고 해봅시다.

Cells A1 to B3 of Excel spreadsheetCells A1 to B3 of Excel spreadsheetCells A1 to B3 of Excel spreadsheet

이는 다음과 같은 스크립트로 할 수 있습니다.

1
multiple_cells = sheet['A1':'B3']
2
for row in multiple_cells:
3
    for cell in row:
4
        print cell.value

이 경우 다음과 같은 결과가 출력됩니다.

1
Name
2
Profession
3
Abder
4
Student
5
Bob
6
Engineer

모든 행과 열에 접근하기

OpenPyXL을 이용하면 rows()columns() 메서드를 각각 사용해 엑셀 문서의 모든 행과 열에 접근할 수 있습니다.

모든 행에 접근하기 위해서는 다음과 같이 하면 됩니다.

1
all_rows = sheet.rows
2
print all_rows[:]

모든 행에 접근하는 데 [:] 표기법을 사용했다는 것을 눈여겨보세요. 이는 whole_document에서 반환된 객체의 타입이 튜플(tuple)이기 때문입니다.

위 스크립트의 출력 결과는 다음과 같을 것입니다.

1
((<Cell Sheet1.A1>, <Cell Sheet1.B1>), (<Cell Sheet1.A2>, <Cell Sheet1.B2>), (<Cell Sheet1.A3>, <Cell Sheet1.B3>), (<Cell Sheet1.A4>, <Cell Sheet1.B4>), (<Cell Sheet1.A5>, <Cell Sheet1.B5>), (<Cell Sheet1.A6>, <Cell Sheet1.B6>), (<Cell Sheet1.A7>, <Cell Sheet1.B7>))

반면 모든 열에 접근하려면 다음과 같이 하면 됩니다.

1
all_columns = sheet.columns
2
print all_columns[:]

어느 경우든 다음과 같은 결과가 출력될 것입니다.

1
((<Cell Sheet1.A1>, <Cell Sheet1.A2>, <Cell Sheet1.A3>, <Cell Sheet1.A4>, <Cell Sheet1.A5>, <Cell Sheet1.A6>, <Cell Sheet1.A7>), (<Cell Sheet1.B1>, <Cell Sheet1.B2>, <Cell Sheet1.B3>, <Cell Sheet1.B4>, <Cell Sheet1.B5>, <Cell Sheet1.B6>, <Cell Sheet1.B7>))

물론 OpenPyXL 문서에서 볼 수 있듯이 엑셀 문서로 할 수있는 일은 더 많습니다.

결론

이 튜토리얼에서는 파이썬을 이용해 엑셀 문서를 처리하는 것이 얼마나 유연한지 알아봤습니다. 튜토리얼의 초반부에 언급했던 시나리오를 기억하십니까? 프로젝트로 해볼 만한 가치가 있을 겁니다!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.