이것저것 잡동사니
[예제 코드] openpyxl 기초 사용법 완벽 정리 본문
반응형
openpyxl은 파이썬을 사용해 엑셀 파일을 작성하거나 읽을 수 있도록 해주는 패키지다. 나는 크롤링 등으로 수집한 데이터를 정리할 때 주로 사용한다. 처음 사용하거나 오랜만에 사용하는 경우 제대로 헤메는 경우가 많기 때문에 짧은 예제 코드를 통해 기본적인 기능을 정리해놓으려고 한다.
openpyxl 버전 : 3.1.2 (2023-10-23 기준)
★ 주의 ★
1. 엑셀 파일의 행 번호는 1부터 시작한다
2. 엑셀 파일의 열 문자는 'A'부터 시작한다
3. 빈 셀의 값은 None이다 (빈 문자열 ''이 아님)
예제1) Workbook와 worksheet 생성/삭제, 데이터 쓰기, workbook 저장
from openpyxl import Workbook
# Workbook(엑셀 파일) 생성
# 이때, 'Sheet'라는 이름의 worksheet가 기본적으로 생성된다
wb = Workbook()
# Worksheet 생성
ws1 = wb.create_sheet('new_sheet_1')
ws2 = wb.create_sheet('new_sheet_2')
# 기본으로 생성되는 worksheet 삭제
del wb['Sheet']
# Worksheet들의 이름을 리스트 자료형으로 얻을 수 있다
sheet_names = wb.sheetnames
# Worksheet의 이름을 사용해 해당 worksheet를 사용할 수 있다
ws = wb['new_sheet_2']
# A1셀에 문자열 쓰기
ws['A1'] = 'Hello, World!'
# Workbook 저장
wb.save('example.xlsx')
wb.close()
반응형
예제2) Workbook의 값 읽기
from openpyxl import load_workbook
# Workbook 로드하기
wb = load_workbook('example.xlsx')
# Worksheet 객체 얻기
ws = wb['new_sheet_2']
# 'A1'셀의 값 읽어서 출력하기
text = ws['A1'].value
print(text)
wb.close()
예제3) 특정 위치에 데이터 쓰기/특정 위치의 데이터 읽기
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
from openpyxl.utils.cell import coordinate_from_string
from openpyxl.utils.cell import column_index_from_string
wb = Workbook()
ws = wb['Sheet']
# 'A1'셀에 값 쓰기
ws['A1'] = 'Apple'
# 두 번째 열 첫 번째 행 ('B1')에 값 쓰기
ws[get_column_letter(2) + '1'] = 'Banana'
# 'A1'셀의 값 읽기
str1 = ws['A1'].value
# 'B1'셀의 값 읽기
str2 = ws[get_column_letter(2) + '1'].value
print(str1, str2)
# 문자열 위치를 행과 열으로 분리하기
coord = coordinate_from_string('A2') # ('A', 2)
# 열 문자를 숫자 인덱스로 변환하기
col_idx = column_index_from_string('C') # 3
print(coord, col_idx)
wb.save('example2.xlsx')
wb.close()
예제4) 행 높이 / 열 너비 지정하기
※ 주의 : 너비와 높이의 단위가 다르다 (같은 값을 넣어도 너비가 6배 정도 길게 나온다)
from openpyxl import Workbook
wb = Workbook()
ws = wb['Sheet']
# 열 너비 지정하기 (10=약 120픽셀)
ws.column_dimensions['A'].width = 16
# 행 높이 지정하기 (10=20픽셀)
ws.row_dimensions[1].height = 100
wb.save('example3.xlsx')
wb.close()
비례식을 사용해 다음과 같은 함수를 만들면 픽셀 단위로 치수를 설정할 수 있다.
def set_row_height_in_pixel(worksheet, row, height):
worksheet.row_dimensions[row].height = height * 10 / 20
def set_col_width_in_pixel(worksheet, col, width):
worksheet.column_dimensions[col].width = width * 10 / 120
set_row_height_in_pixel(ws, 1, 120) # 1행의 높이를 120픽셀으로
set_col_width_in_pixel(ws, 'A', 120) # A열의 너비를 120픽셀으로
반응형
예제5) 이미지 URL을 사용한 그림 삽입
from openpyxl import Workbook
from openpyxl.drawing.image import Image
import urllib3
import io
def get_image(http, url, width, height):
img = Image(io.BytesIO(http.request('GET', url).data))
img.width = width * 10 / 15
img.height = height * 10 / 15
return img
def set_row_height_in_pixel(worksheet, row, height):
worksheet.row_dimensions[row].height = height * 10 / 20
def set_col_width_in_pixel(worksheet, col, width):
worksheet.column_dimensions[col].width = width * 10 / 120
http = urllib3.PoolManager()
wb = Workbook()
ws = wb['Sheet']
set_row_height_in_pixel(ws, 1, 120)
set_col_width_in_pixel(ws, 'A', 120)
img_url = 'https://이미지URL'
# 'A1' 위치에 120x120px 크기로 이미지 삽입
ws.add_image(get_image(http, img_url, 120, 120), anchor='A1')
wb.save('example4.xlsx')
wb.close()
반응형
'컴퓨터공학 > 예제 코드' 카테고리의 다른 글
[예제 코드] PyQt5을 사용한 조이스틱(Joystick) 클래스 (0) | 2022.12.28 |
---|---|
[예제 코드] hyperopt를 사용한 LightGBM의 hyperparameter tuning (0) | 2022.10.05 |
[예제 코드] 분류 모델에 사용되는 성능 평가 지표 (sklearn 사용) (0) | 2022.07.21 |
[예제 코드/Python] 바이낸스 API를 이용한 암호화폐 선물 가격 데이터 얻기 (0) | 2022.06.11 |
[예제 코드/C언어] 윈도우 명령 프롬프트 크기 변경&고정하기 (0) | 2022.06.11 |
Comments