keilab

파이썬으로 엑셀 다루기(openpyxl 사용법) 본문

Python

파이썬으로 엑셀 다루기(openpyxl 사용법)

datapy 2022. 10. 19. 22:00

 

00. 개요


이번 포스팅에서는 openpyxl 라이브러리 사용방법을 알아보겠습니다. openpyxl은 엑셀 파일 읽기와 쓰기가 모두 가능한 라이브러리 입니다.

01. 설치


pip install openpyxl

02. 파일 생성


시트 제목은 "practice", 파일이름은 "test.xlsx"로 하여 엑셀 파일을 직접 생성해보겠습니다.

import openpyxl

wb=openpyxl.Workbook()

sheet=wb.active
sheet.title="practice"

wb.save("test.xlsx")

 

위 코드를 실행하면, 같은 경로에 아래와 같이 test.xlsx 파일이 생성될 것입니다. 파일을 열어보면, 시트 이름이 "practice"인 것을 확인할 수 있습니다. 


이제 내용을 작성해보겠습니다. 열었던 엑셀파일을 종료한다음 코드를 작성하겠습니다. 파일이 열린상태에서 코드를 실행하면 권한 문제로 에러가 발생합니다.

엑셀파일 종료 후, 방금 저장했던 test.xlsx 파일을 파이썬 코드로 접근하여 내용을 작성합니다.

 03. 파일 불러오기, 내용 작성


  • 엑셀 파일 로드
  • 시트이름 가져오기
import openpyxl

#엑셀 파일 불러오기
sample=openpyxl.load_workbook('test.xlsx')

#sheet name 출력
print(sample.get_sheet_names())

실행결과

>> ['practice']
  • 시트 접근

시트 접근은 두가지 방법이 있습니다. 시트가 한개만 있거나 첫번째 시트에 접근하려면, 파일을 로드하는 동시에 첫번재 시트가 활성화 되므로  sheet=wb.active 코드를 사용하면 됩니다.

시트가 여러개이고 첫번째 시트가 아닌 다른 시트에 접근하려면, 위 코드를 참고하여 시트 이름을 얻어서 해당 시트 이름으로 접근하면 됩니다.

#시트가 1개이거나, 첫번째 시트에 접근할 경우
sheet=wb.active

#시트가 여러개이고, 첫번째 시트가 아닌 다른 시트에 접근할 경우(시트 이름으로 접근)
sheet=wb['practice']

 

  • 내용 작성

시트까지 접근했으면, 셀에 내용을 작성합니다. 셀을 접근하는 방법은 row, column값을 입력하는 방법과 아래코드에서 주석처리한 것처럼 엑셀의 행(숫자), 열(알파벳)을 조합하여 접근할 수 있습니다. 셀에 접근한 다음 작성하고자 하는 값(value)을 지정하고 마지막으로 파일을 저장합니다.

A1=sheet.cell(row=1,column=1)  # A1=sheet['A1']
A1.value="이름"

B1=sheet.cell(row=1,column=2)  # B1=sheet['B1']
B1.value="성적"

A2=sheet.cell(row=2,column=1)  # A2=sheet['A2']
A2.value="손흥민"

B2=sheet.cell(row=2,column=2)  # B2=sheet['B2']
B2.value="99"

wb.save("result.xlsx")

 

 

실행결과

[result.xlsx]

 

04. Example


위에서 학습한 내용을 토대로 간단한 코드를 만들어보겠습니다. 목표는 학생들의 과목별 성적이 입력된 score.xlsx 파일을 읽어들여 총 점수평균점수를 계산하여 result.xlsx 파일로 저장하는 것입니다.

 

성적파일은 아래와 같이 엑셀 파일을 작성하여 준비합니다.

[score.xlsx]

 

 

import openpyxl

#파일 로드
wb=openpyxl.load_workbook('score.xlsx')

#시트 접근
sheet=wb.active

#합계
sheet['F2']='=SUM(B2:E2)'
sheet['F3']='=SUM(B3:E3)'
sheet['F4']='=SUM(B4:E4)'
sheet['F5']='=SUM(B5:E5)'

#평균
sheet['G2']='=AVERAGE(B2:E2)'
sheet['G3']='=AVERAGE(B3:E3)'
sheet['G4']='=AVERAGE(B4:E4)'
sheet['G5']='=AVERAGE(B5:E5)'

#파일 저장
wb.save("result.xlsx")

 

실행결과

[result.xlsx]