• 목록
  • 아래로
  • 위로




안녕하세요?


스포어 회원님들께서도 다들 업무에서 MS 엑셀을 많이 활용하실 것 같은데요.


엑셀을 자동화하면 업무가 크게 수월해지는 경우가 많겠죠 ^^


그래서 20번대 강좌에서는 파이썬에서 엑셀 파일을 직접 읽고 쓸 수 있는 모듈인 OpenPyXL에 대해 다뤄보고자 합니다.


OpenPyXL 이외에도 파이썬에서 엑셀을 조작하는 여러 모듈이 있지만, 이 모듈은 (1) xlsx 형식을 지원하며 (2) 읽기와 쓰기가 동시에 가능하고 (3) 퍼포먼스도 그럭저럭 괜찮은 편이라는 점에서 가장 무난하다고 생각됩니다.


엑셀 매크로를 사용해보지 않으신 분들은 다소 생소하실 수도 있지만, 나름대로 직관적인 접근방법을 갖고 있다고 생각합니다.


그럼 문서 - 시트 - 셀 순서대로 접근하는 방법을 살펴보겠습니다.




1. 엑셀 문서 열기


import openpyxl
wb = openpyxl.load_workbook('filename.xlsx')


openpyxl.load_workbook() 함수는 파일 이름을 전달받고, workbook 유형의 데이터값을 반환합니다.




2. 통합문서에서 시트 열기


import openpyxl
wb = openpyxl.load_workbook('filename.xlsx')
sheet = wb.get_sheet_by_name('sheet1')


workbook 객체에서 get_sheet_by_name() 메서드를 호출하면 시트를 얻을 수 있습니다.

(이 메서드는 depreciated될 예정이며 앞으로는 wb['sheet1'] 형태로 사용하면 됩니다.)


한편 get_active_sheet() 메서드를 호출하면 활성시트를 바로 얻을 수 있습니다.

(이 메서드는 depreciated될 예정이며 앞으로는 .active 메서드를 사용하면 됩니다.)




3. 시트에서 셀의 값을 얻기


import openpyxl
wb = openpyxl.load_workbook('filename.xlsx')
sheet = wb.get_sheet_by_name('sheet1')
value = sheet['A1'].value


cell 객체는 .value 속성을 가지며, 이 속성은 해당 셀에 저장된 값을 지닙니다.


.value 속성은 문자열, 날짜시간, 정수 등 타입을 그대로 반환하다는 점에서 매우 강력합니다 ㄷㄷ


한편 행열이 길어지면 알파벳을 사용하기 어렵기 때문에, sheet.cell(row=28, column=32)과 같은 방식으로 알파벳 대신 정수를 사용할 수 있습니다.


여기에서 row와 column의 값은 0이 아니라 1에서부터 시작한다는 점을 주의하세요!


아울러 sheet.get_highest_row(), sheet.get_highest_column()을 활용하여 행열의 크기를 알면, 이를 for 문과 range() 함수에 활용할 수 있습니다!

(현재 최신버전에서는 sheet.max_row, sheet.max_column으로 대체되었습니다.)




4. 시트에서 행열을 얻기


import openpyxl
wb = openpyxl.load_workbook('filename.xlsx')
sheet = wb.get_sheet_by_name('sheet1')
data = list(sheet['A1':'E5'])


특정 영역의 셀 객체들을 얻기 위하여 엑셀 매크로와 유사한 방식의 표현도 가능합니다.


아울러 sheet.columns[5], sheet.rows[10] 이런 방법으로 엑셀의 특정 행 또는 열 전체를 클릭한 것과 마찬가지의 결과를 얻을 수 있습니다!




지금까지 문서 - 시트 - 셀의 순서대로 접근을 하여 데이터를 얻는 방법에 대해 살펴보았습니다.


다음 강좌에서는 문서를 저장하고 셀의 값을 쓰는 방법에 대해 살펴보겠습니다.


gamb1t님 gamb1t 포함 1명이 추천

추천인 1

작성자
이니스프리 119 Lv. (0%) 1887460/115200000EXP

당분간 일신상의 사정으로 쪽지나 댓글로 답변을 드리기 어렵습니다. 죄송합니다.

 

CSVpuymXAAAVVpd.jpg

댓글 3

ilovepc
자바의 POI 같은건가요? ㅎㅎ
comment menu
2020.02.04. 16:24

신고

"ilovepc님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → ilovepc
profile image

안녕하세요??

제가 자바를 잘 다루지 못해서 정확히는 모르겠지만 Apache POI와 유사한 라이브러리 같네요~!

아마 Apache POI가 보다 강력한 기능을 제공할 것 같네요 ^^

comment menu
2020.02.04. 18:54

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자
profile image
참고로 엑셀파일의 작성자 및 최종변경자를 확인하는 방법은 아래 글에 적었어요 :)
https://studyforus.com/tipnknowhow/716909
comment menu
2020.08.11. 13:22

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [Python] 그누보드 자동 글 작성 + 멀티 파일 업로드 스크립트 1 image 이니스프리 이니스프리 21.05.16.09:32 23700
28 [Python] GIF 파일에 프로그레스바 삽입하기! (Adding progress bar into GIF) image 이니스프리 이니스프리 22.05.14.13:14 12607
27 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9263
26 [Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 image 이니스프리 이니스프리 19.08.04.13:40 7826
25 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6282
24 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5626
23 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 5586
22 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4689
21 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 이니스프리 19.07.04.05:52 4392
20 [번외편 - 구글뉴스] 리뉴얼된 구글뉴스에서 RSS 피드를 생성하는 방법 6 image 이니스프리 이니스프리 18.10.07.17:58 3533
19 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 2 image 이니스프리 이니스프리 19.07.16.17:55 2745
18 [번외편 - 아미나] 그누보드/아미나에서 게시글의 날짜를 최종수정일로 변경하고, 목록스킨 및 위젯을 최종수정일 순으로 정렬하기 2 image 이니스프리 이니스프리 18.11.11.22:36 2573
17 [디지털포렌식전문가] 제21회 필기시험 합격 후기 9 image 이니스프리 이니스프리 23.10.29.16:11 2552
16 1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2509
15 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2094
14 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2074
13 [Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기 image 이니스프리 이니스프리 21.03.06.23:35 1572
12 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 7 image 이니스프리 이니스프리 20.05.14.19:08 1436
11 [번외편 - 법률] 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 이니스프리 18.12.07.14:16 1313
21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 3 image 이니스프리 이니스프리 20.02.01.23:46 1271