[Python] 파이썬 자동화 기초 : 오픈파이엑셀(openpyxl) 엑셀 차트 그리기, 셀 스타일, 수식 넣기, 이미지 추가

[Python] 파이썬 자동화 기초 : 오픈파이엑셀(openpyxl) 엑셀 차트 그리기, 셀 스타일, 수식 넣기, 이미지 추가

이전글에 이어서 오픈파이엑셀(openpyxl) 라이브러리를 이용한 파이썬 자동화 명령어를 정리했다.

파이썬에서 엑셀 차트 그리는 방법, 엑셀 셀 스타일 지정하는 방법, 수식 넣는 방법, 이미지 추가하는 방법이다.

이전글 : [Python] 파이썬 자동화 기초 : 오픈파이엑셀(openpyxl) 엑셀 자동화 명령어 모음

1. 파이썬에서 엑셀 차트 그리는 방법

엑셀 차트의 형태와 종류가 너무나 다양하므로 여기서는 두 가지 차트(바 차트, 라인 차트)만 그려본다.

1-1. BarChart 그리기

from openpyxl import Workbook wb = Workbook() ws = wb.active # 셀 값 대입하기 ws[“A1”] = “번호” ws[“B1”] = “국어” ws[“C1”] = “수학” from random import * for x in range(2, 12): for y in range(1, 4): if y == 1: ws.cell(row=x, column=y, value=x – 1) else: ws.cell(row=x, column=y, value=randint(0, 100)) # 바 차트 그리기 from openpyxl.chart import BarChart, Reference bar_value = Reference(ws, min_row=1, max_row=11, min_col=2, max_col=3) bar_chart = BarChart() bar_chart.add_data(bar_value, titles_from_data=True) ws.add_chart(bar_chart, “E1”) wb.save(“filename.xlsx”) wb.close()

결과

1-2. LineChart 그리기

from openpyxl import Workbook wb = Workbook() ws = wb.active # 셀 값 대입하기 ws[“A1”] = “번호” ws[“B1”] = “국어” ws[“C1”] = “수학” from random import * for x in range(2, 12): for y in range(1, 4): if y == 1: ws.cell(row=x, column=y, value=x – 1) else: ws.cell(row=x, column=y, value=randint(0, 100)) # 라인 차트 그리기 from openpyxl.chart import LineChart, Reference line_value = Reference(ws, min_row=1, max_row=11, min_col=2, max_col=3) line_chart = LineChart() line_chart.add_data(line_value, titles_from_data=True) line_chart.title = “성적표” # 미리 정의된 스타일을 적용, 사용자가 개별 지정도 가능 line_chart.style = 10 line_chart.y_axis.title = “점수” line_chart.x_axis.title = “번호” ws.add_chart(line_chart, “E1”) wb.save(“filename.xlsx”) wb.close()

결과

이외에도 많은 차트 종류와 형태가 있으며, 자세한 내용은 라이브러리 문서의 charts 항목을 확인해본다.

https://openpyxl.readthedocs.io/en/stable/charts/introduction.html

2. 파이썬에서 엑셀 셀 스타일 변경하는 방법

2-1. 로우 길이, 컬럼 길이 변경

(1) 열 너비(column width) 변경하기

# A열 너비를 5로 지정 ws.column_dimensions[“A”].width = 5

(2) 행 높이(row height) 변경하기

# 첫번째 행의 높이를 50으로 지정 ws.row_dimensions[1].height = 50

2-2. 셀 스타일 변경

(1) 폰트 변경

# 폰트 변경 from openpyxl.styles import Font cell = ws[“A1″] cell.font = Font(color=”FF0000″, name=”Arial”, size=20, italic=True, bold=True, strike=True, underline=”double”) # color 는 RGB 값을 넣으면 글자색상 적용됨 (FF0000은 빨간색) # name 은 폰트명 # size 는 폰트크기 # italic 은 기울임 여부 # bold 는 굵게표시 여부 # strike 는 취소선 여부 # underline 은 밑줄을 의미함 # underline 값은 다음값 중에서 선택 가능함 : “single”, “double”, “singleAccounting”, “doubleAccounting” # 차례대로 실선, 이중실선, 실선(회계용), 이중실선(회계용) 을 의미함

(2) 셀 테두리 적용

# 셀 테두리 적용 from openpyxl.styles import Border, Side cell = ws[“A1″] thin_border = Border(left=Side(style=”thin”), right=Side(style=”thin”), top=Side(style=”thin”), bottom=Side(style=”thin”)) cell.border = thin_border # style 값이 “thin”이므로 얇은 선이 적용됨 # style 값은 다음값 중에서 선택 가능함 : “dashDot”, “dashed”, “dashDotDot”, “dotted”, “thin”, “mediumDashDot”, “mediumDashDotDot”, “hair”, “medium”, “double”, “thick”, “mediumDashed”, “slantDashDot”

(3) 셀 배경색 적용

from openpyxl.styles import PatternFill cell = ws[“A1″] # 셀 값이 정수형(int)이고 90 초과하는 경우 if isinstance(cell.value, int) and cell.value > 90: # 배경을 초록색으로 설정 cell.fill = PatternFill(fgColor=”00FF00″, fill_type=”solid”)

(4) 가운데 정렬 (수평 가운데 정렬, 수직 가운데 정렬 각각 적용가능)

cell = ws[“A1″] cell.alignment = Alignment(horizontal=”center”, vertical=”center”)

(5) 틀 고정

# B2 기준으로 틀 고정 ws.freeze_panes = “B2”

3. 파이썬에서 엑셀 수식 넣는 방법

3-1. 셀에 엑셀 수식 넣기

import datetime from openpyxl import Workbook wb = Workbook() ws = wb.active # 오늘 날짜 대입 ws[“A1”] = datetime.datetime.today() ws[“A2”] = “=SUM(1, 2, 3)” ws[“A3”] = “=AVERAGE(1, 2, 3)” ws[“A4”] = 10 ws[“A5”] = 20 ws[“A6”] = “=SUM(A4:A5)” wb.save(“filename.xlsx”) wb.close()

3-2. (수식이 그대로 나오도록) 엑셀파일 불러오기

from openpyxl import load_workbook wb = load_workbook(“filename.xlsx”) ws = wb.active # 수식 그대로 가져온다. for row in ws.values: for cell in row: print(cell) wb.close()

결과는 아래와 같다.

2022-01-19 05:12:05.534153 =SUM(1, 2, 3) =AVERAGE(1, 2, 3) 10 20 =SUM(A4:A5)

3-3. (수식이 아닌 계산 값이 나오도록) 엑셀파일 불러오기

from openpyxl import load_workbook wb = load_workbook(“filename.xlsx”, data_only=True) ws = wb.active # 수식이 아닌 실제데이터를 가지고 옴 # evaluate 되지 않은 상태의 데이터는 None 이라고 나옴 for row in ws.values: for cell in row: print(cell) wb.close()

만약 결과가 아래처럼 “None” 값이 포함되어 나온다면, 오픈파이엑셀(openpyxl) 라이브러리로 엑셀파일을 생성한 경우다.

2022-01-19 05:12:05.534153 None None 10 20 None

오픈파이엑셀(openpyxl) 라이브러리를 이용해서 엑셀파일을 생성한 경우, 해당 엑셀파일의 수식 부분이 None으로 표시된다. 오픈파이엑셀(openpyxl)로 만든 파일은, 한 번 사람이 직접 엑셀파일을 열어서 저장해야만 수식의 계산결과 값이 저장된다.

이러한 계산을 영어로 evaluate[이밸류에이트]라고 표현하며, evaluate 되지 않은 상태의 데이터는 None 이라고 표시된다.

엑셀파일을 열어서 저장하고, 다시 코드를 실행해보면 아래와 같이 출력결과가 나온다.

2022-01-19 05:12:05.534153 6 2 10 20 30

4. 파이썬에서 엑셀파일에 이미지 추가하는 방법

from openpyxl import Workbook from openpyxl.drawing.image import Image wb = Workbook() ws = wb.active img = Image(“bb.png”) # C3 위치에 bb.png 파일의 이미지를 삽입 ws.add_image(img, “C3”) wb.save(“image.xlsx”) wb.close() # 만약 ImportError : You must install Pillow to fetch image… # 위와 같은 에러가 발생할 경우, pip install Pillow 명령어로 패키지를 설치하고 다시 실행하자.

결과

참고사이트 1 : openpyxl 라이브러리 공식문서 https://openpyxl.readthedocs.io/

참고사이트 2 : 나도코딩 https://www.youtube.com/watch?v=exgO1LFl9x8&t=4285s