본문 바로가기
개발자, 코딩

[python]openpyxl을 이용해서 excel 파일 만들기

by The Career 2021. 7. 27.
반응형

업무를 하다보면 데이터베이스의 내용을 엑셀 파일로 만들어야하는 경우가 많이 생깁니다.

특히 데이터 처리에 빠른 성능을 보이는 python을 통해 엑셀 파일을 만드는 방법을 알아보겠습니다.

 

 

1. OpenPyXL 이란? 

openpyxl은 엑셀 파일을 읽고 쓰기 위한 python 라이브러리입니다. 공식 홈페이지를 보면 기존에 오피스 프로그램을 읽고 쓸 수 있는 파이썬 라이브러리가 부족해서 XML 기반으로 읽고 쓸 수 있게 만든 것이 openpyxl입니다.

 

All kudos to the PHPExcel team as openpyxl was initially based on PHPExcel.

 

공식 홈페이지에 나와있는 글귀를 봐서는 PHPExcel 라이브러리를 만들었던 팀에서 만든 것 같습니다.

 

2. OpenPyXL 설치하기? 

openpyxl은 외부 라이브러리이므로, 사용하기 전 설치가 필요합니다. 만약 아래와 같은 에러메세지가 보인다면 아직 설치가 되지 않았다는 의미입니다.

openpyxl 모듈이 설치되지 않았습니다.

아래 명령를 통해 openpyxl을 설치해줍니다.(저는 Windows10 환경에서 테스트했습니다.)

pip install openpyxl

 

명령어 실행 후 설치가 완료된 화면입니다.

 

pip freeze

위 명령어를 통해 정상적으로 설치가 되었는지 확인할 수 있습니다.

저는 3.0.7 버젼이 잘 설치가 되어있네요. 이제 설치한 openpyxl을 사용해보도록 하겠습니다.

 

3. OpenPyXL 로 excel 파일 만들기

from openpyxl import Workbook

#기본 사용하기
#workbook 생성하기
workbook = Workbook()

#현재 workbook의 활성화 된 Sheet 가져오기
sheet = workbook.active

# cell에 직접 데이터 입력하기
sheet['A1'] = "이름"
sheet['B1'] = "나이"
sheet['C1'] = "성별"
sheet['D1'] = "주소"

# row 단위로 데이터 입력하기
sheet.append(['홍길동', 20, '남자', '서울'])
sheet.append(['춘향이', 25, '여자', '경기'])
sheet.append(['이몽룡', 30, '남자', '충청도'])


# 파일 저장하기
workbook.save("sample.xlsx")

위 소스코드는 excel 파일을 만들기 위한 기본 예제입니다.

workbook() 함수를 통해 엑셀을 만들고 sheet를 만들어 데이터를 넣을 수 있습니다. sheet는 A1, B1 등 cell에 직접 접근해서 데이터를 넣을 수도 있고, append 함수를 사용해서 한 줄 단위로 넣을 수 있습니다. 그리고 save 함수에 파라메터로 저장할 경로와 파일명을 넘겨주면 저장할 수 있습니다.

 

예제파일을 실행한 후 생성된 엑셀 파일입니다.

cell에 직접 접근하여 만든 Header 부분과 Data 부분이 잘 들어간 것을 확인 할 수 있습니다.

한 가지 예제를 더 살펴보겠습니다. 기본적으로 Workbook 함수로 워크 북을 만들면 기본 1개의 Sheet만 생성되어 있습니다. 경우에 따라서는 여러 Sheet를 만들어야할 경우가 있습니다.

 

from openpyxl import Workbook

#workbook 생성하기(1개의 시트가 생성된 상태)
workbook = Workbook()

#현재 workbook의 활성화 된 Sheet 가져오기
sheet = workbook.active
sheet.title = "학생정보" #해당 sheet의 sheet명 변경하기

# cell에 직접 데이터 입력하기
sheet['A1'] = "이름"
sheet['B1'] = "나이"
sheet['C1'] = "성별"
sheet['D1'] = "주소"
sheet['E1'] = "학년"

# row 단위로 데이터 입력하기
sheet.append(['홍길동', 20, '남자', '서울', '1학년'])
sheet.append(['춘향이', 25, '여자', '경기', '2학년'])
sheet.append(['이몽룡', 30, '남자', '충청도', '2학년'])

#시트 추가하기
workbook.create_sheet("성적정보", 1)
sheet2 = workbook['성적정보'] #생성한 시트 접근
sheet2.append(['홍길동', '국어', 100])
sheet2.append(['춘향이', '수학', 90])
sheet2.append(['이몽룡', '사회', 85])


# 파일 저장하기
workbook.save("sample2.xlsx")

"학생정보" 와 "성적정보" 2개의 sheet를 만드는 예제입니다. 위와 동일하게 첫 번째 sheet 생성 후 create_sheet 함수를 통해 새로운 sheet를 생성합니다. 첫 번째 파라메터로 sheet 명을 입력하고 두 번째 파라메터로 sheet 순서를 입력합니다.

 

새로운 sheet에 접근할 때는 앞서 생성한 wookbook에 workbook['sheet명'] 이처럼 생성한 sheet명으로 접근할 수 있습니다.

 

 

매우 기본적인 내용만 살펴보았습니다. 이 외에도 Style이나 셀 병합 등 설정할 수 있는 option들이 많이 있습니다.

더 자세한 설명은 아래 공식 홈페이지에서 확인할 수 있습니다.

 

 

openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.7 documentation

Install openpyxl using pip. It is advisable to do this in a Python virtualenv without system packages: Warning To be able to include images (jpeg, png, bmp,…) into an openpyxl file, you will also need the “pillow” library that can be installed with:

openpyxl.readthedocs.io

위 예제는 아래 git hub에서 확인할 수 있습니다.

 

GitHub - SEUNGJOOMOON/Python_basic: python basic examples

python basic examples. Contribute to SEUNGJOOMOON/Python_basic development by creating an account on GitHub.

github.com

 

 

[개발자 멘토링]개발자 취업/이직/방통대/대학원/이력서/포트폴리오 등 멘토링 진행합니다.

개발자 취업이나 이직과 관련하여 멘토링을 진행합니다. 멘토링은 인프런 멘토링을 통해 신청하실 수 있으며, 진행 방식 및 주제는 아래 내용을 참고해주세요! 멘토링 소개 ✅ 커리어 소개 현)

nick901106.tistory.com

 

※ 이 글은 주니어 개발자의 삽질과 공부한 결과를 저장한 문서입니다.

 

잘못된 내용이 있을 수 있으니 단순한 참고만 부탁드리며, 댓글로 정확한 내용을 적어주시면 더 많은 분들에게 좋은 정보를 공유하는 좋은 기회가 될 것 입니다!

반응형