엑셀을 하다 보면 아래 그림과 같이 지나치게 셀 폭이 넓거나 셀 폭이 좁아서 셀 값이 잘리는 경우가 있다.
이런 경우는 셀 폭을 데이터에 맞게 조절해줄 필요가 있을 것이다. 이번 포스팅에서는 OpenPyXL을 이용하여 데이터에 맞게 셀 폭을 조절하는 방법에 대해서 알아보자.
셀 폭 데이터 길이에 맞춰서 조절하기
사실 OpenPyXL에서는 칼럼 폭을 자동으로 조절하는 기능이 없다. 이때에는 각 칼럼 별로 셀 값을 다 포함하는 최적의 폭을 추정하여 셀 폭을 조절해야 한다.
아래 코드는 각 칼럼에 대하여 최적의 셀 폭을 데이터 길이에 맞춰서 추정한다. 코드 설명은 필요한 부분만 하고 나머지는 주석을 참고하자.
import numpy as np
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Alignment
## 엑셀에 넣을 데이터
data = np.array([
['Nation', 'SalesRep', 'Product', 'Units'],
['America', 'Tom', 'Apple', 6380],
['China', 'Fred', 'Grape', 5619],
['Republic of Korea', 'Amy', 'Pear', 4565],
['Russia', 'Sal', 'Banana', 5323],
['Republic of Korea', 'Fritz', 'Apple', 4394],
['Russia', 'Sravan', 'Grape', 7195],
['North Korea', 'Xi', 'Pear', 5231],
['America', 'Hector', 'Banana', 2427],
['Republic of Korea', 'Tom', 'Banana', 4213],
['England', 'Fred', 'Pear', 3239],
['Ukraina', 'Amy', 'Grape', 6520],
['England', 'Sal', 'Apple', 1310],
['England', 'Fritz', 'Banana', 6274],
['Canada', 'Sravan', 'Pear', 4894],
['Canada', 'Xi', 'Grape', 7580],
['Canada', 'Hector', 'Apple', 9814]
])
wb = Workbook()
ws = wb.active
## 시트에 데이터 삽입
for row in data:
ws.append(row.tolist())
## 각 칼럼에 대해서 모든 셀값의 문자열 개수에서 1.1만큼 곱한 것들 중 최대값을 계산한다.
for column_cells in ws.columns:
length = max(len(str(cell.value))*1.1 for cell in column_cells)
ws.column_dimensions[column_cells[0].column_letter].width = length
## 셀 가운데 정렬
for cell in ws[column_cells[0].column_letter]:
cell.alignment = Alignment(horizontal='center')
wb.save('sample_09.xlsx')
line 36~38
Worksheet 객체의 columns를 이용하여 모든 칼럼을 돌면서 각 칼럼에 대한 모든 데이터를 포함할 수 있는 최적 폭을 계산한 것이다. 이때 각 셀 값을 문자열로 변환하여 문자열 길이를 계산한다. 그다음 약간의 여백을 고려하여 1.1을 곱한 값들 중에서 길이 최대값을 찾는다(line 37). 그리고 해당 칼럼의 폭을 앞에서 구한 길이 최대값으로 설정한다(line 38).
위 코드를 실행하면 다음과 같이 깔끔하게 정렬된 것을 알 수 있다.
'프로그래밍 > 엑셀(Excel)' 카테고리의 다른 글
[OpenPyXL] 차트 그리기 - (2) Bar Chart (0) | 2022.10.29 |
---|---|
[OpenPyXL] 차트 그리기 - (1) Line Chart (0) | 2022.10.27 |
[OpenPyXL] 8. 셀 안에 데이터 막대(Data Bar) 삽입하기 (feat. FormatObject, DataBar, Rule) (0) | 2022.10.06 |
[OpenPyXL] 7. 데이터 필터 적용하기(feat. add_filter_column) (3) | 2022.10.04 |
[OpenPyXL] 6. 열(칼럼) 가로, 세로 길이(폭과 높이) 설정하기 (feat. width, height) (0) | 2022.10.03 |
댓글