openpyxl로 엑셀 다루기
openpyxl 라이브러리 소개
- openpyxl: 파이썬(Python)으로 Excel (.xlsx) 파일을 다루기 위한 라이브러리
- 주요 기능:
- Excel 파일 읽기 (기존 파일 열기)
- Excel 파일 쓰기 (새 파일 생성, 기존 파일 수정)
- 시트(Sheet) 관리: 생성, 선택, 이름 변경 등
- 셀(Cell) 데이터 관리: 읽기, 쓰기 등
- 행(Row) 및 열(Column) 조작
- 다양한 스타일 적용 (폰트, 색상, 정렬 등)
- 설치: openpyxl 라이브러리를 사용하기 전에 먼저 설치해야 .
- Anaconda Prompt (또는 명령 프롬프트) 실행 후 다음 명령어 입력 및 실행:
pip install openpyxl
- 임포트: 파이썬 코드에서 openpyxl을 사용하기 위해 임포트
import openpyxl
기존 엑셀 워크북 열기
openpyxl.load_workbook('파일명.xlsx'):- 지정된 이름의 Excel 파일을 열기
- 파일명은 경로를 포함할 수 있음 (예:
'C:/Users/User/Documents/my_excel.xlsx'). - 반환 값은 Workbook 객체
- 예시:
from openpyxl import load_workbook
workbook = load_workbook('example.xlsx') # 현재 폴더에 있는 example.xlsx 파일 열기
새로운 엑셀 워크북 만들기
openpyxl.Workbook():- 비어 있는 새로운 Excel 워크북(Workbook) 객체를 생성
- 기본적으로 하나의 활성화된 시트('Sheet')를 포함
- 예시:
from openpyxl import Workbook
new_workbook = Workbook() # 새로운 워크북 생성
시트(Sheet) 선택
- 시트 목록 확인:
workbook.sheetnames(모든 시트 이름을 리스트로 반환)- 예:
print(workbook.sheetnames)➡️['Sheet1', 'Data', 'Report']
- 예:
- 워크북 내 시트 선택:
- 이름으로 선택:
workbook['시트 이름'](반환 값은 Worksheet 객체)- 예:
sheet = workbook['Sheet1']
- 예:
- 인덱스로 선택:
workbook.worksheets는 모든 시트의 리스트를 반환합니다 (0부터 시작).- 예:
sheet = workbook.worksheets[-1](마지막 시트)
- 예:
- 이름으로 선택:
- 활성화된 시트 가져오기:
workbook.active(처음 열거나 새로 생성했을 때 활성화된 시트)- 예:
active_sheet = workbook.active
- 예:
--
시트(Sheet) 관리
- 시트 이름 확인:
sheet.title(시트 객체의 이름 속성)- 예:
print(sheet.title)
- 예:
- 시트 이름 변경:
sheet.title = '새로운 시트 이름'- 예:
sheet.title = 'Data'
- 예:
- 새 시트 생성:
workbook.create_sheet('새 시트 이름')- 기본적으로 마지막 위치에 생성됩니다.
workbook.create_sheet('새 시트 이름', 0)와 같이 인덱스 를 지정하여 특정 위치에 생성 가능.- 예:
new_sheet = workbook.create_sheet('보고서')
셀(Cell) 값 읽기 📥
sheet['셀 주소'].value:- Excel 시트의 셀 주소 (예: 'A1', 'B5')를 사용하여 셀에 접근하고
.value속성으로 값을 읽어옵니다. - 값이 없으면
None을 반환 - 예:
value_a1 = sheet['A1'].value
- Excel 시트의 셀 주소 (예: 'A1', 'B5')를 사용하여 셀에 접근하고
sheet.cell(row=행번호, column=열번호).value:- 행 번호와 열 번호(1부터 시작)를 사용하여 셀에 접근하고
.value속성으로 값을 읽어옵니다. - 행 번호와 열 번호를 변수로 사용할 때 유용
- 예:
value_b2 = sheet.cell(row=2, column=2).value
- 행 번호와 열 번호(1부터 시작)를 사용하여 셀에 접근하고
셀(Cell) 값 쓰기 📤
sheet['셀 주소'] = '새로운 값':- Excel 시트의 셀 주소에 새로운 값을 할당
- 값은 문자열, 숫자, 불리언 등 다양한 데이터 타입이 될 수 있습니다.
- 예:
sheet['A1'] = 'Hello, Excel!'
sheet.cell(row=행번호, column=열번호, value='새로운 값'):- 행 번호와 열 번호로 셀을 지정하고
value매개변수를 사용하여 값을 씁니다. - 예:
sheet.cell(row=3, column=1, value=123)
- 행 번호와 열 번호로 셀을 지정하고
범위(Range) 다루기
- 범위 선택: 슬라이싱과 유사한 방식으로 여러 셀을 한 번에 선택할 수 있습니다.
sheet['A1':'C5']: A1부터 C5까지의 모든 셀을 포함하는 튜플 형태의 제너레이터를 반환 각 요소는 행(튜플)이고, 각 행은 셀 객체입니다.- 반복문으로 접근:
from openpyxl.utils import get_column_letter
for row in sheet['A1':'C5']: # 범위의 모든 행에 대해 반복
for cell in row: # 행의 모든 셀에 대해 반복
col_letter = get_column_letter(cell.column)
print(col_letter, cell.row, cell.value)
- 열 전체 또는 행 전체 선택:
sheet['A']: A열 전체sheet['1']: 1행 전체sheet['A:C']: A열부터 C열 전체sheet['1:5']: 1행부터 5행 전체
문자 → (열, 행) 좌표로 바꾸기
앞에서 get_column_letter로 열 번호를 문자로 바꿀 수 있음 반대로 문자를 열 번호로 바꾸는 것은 다음과 같이 할 수 있음
from openpyxl.utils.cell import coordinate_from_string, column_index_from_string
col_letter, row = coordinate_from_string('A4') # 셀 이름(A4)를 열, 행 좌표('A',4)로 바꿈
col = column_index_from_string(col_letter) # 열 문자를 열 번호로 바꿈 (A → 1)
row, col
행(Row) 및 열(Column) 다루기
- 행 접근:
sheet.rows: 모든 행을 순회 가능한 객체로 반환. 각 요소는 셀 객체의 튜플입니다.
for row_cells in sheet.rows:
for cell in row_cells:
print(cell.value)
- 열 접근:
sheet.columns: 모든 열을 순회 가능한 객체로 반환. 각 요소는 셀 객체의 튜플입니다.
for col_cells in sheet.columns:
for cell in col_cells:
print(cell.value)
워크북 저장
workbook.save('파일명.xlsx'):- 현재 워크북의 내용을 지정된 파일명으로 저장.
- 주의:
- 기존 파일과 같은 이름으로 저장하면 덮어쓰기
- 저장 시 파일 확장자를
.xlsx로 지정해야 . - 파일명에 경로를 포함하여 특정 위치에 저장할 수 있음
- 예시:
workbook.save('output.xlsx')new_workbook.save('new_excel_file.xlsx')