본문 바로가기
프로그래밍/엑셀(Excel)

[OpenPyXL] 9. 데이터를 다 포함하도록 셀 폭 조절하기

by 부자 꽁냥이 2022. 10. 6.

엑셀을 하다 보면 아래 그림과 같이 지나치게 셀 폭이 넓거나 셀 폭이 좁아서 셀 값이 잘리는 경우가 있다.

이런 경우는 셀 폭을 데이터에 맞게 조절해줄 필요가 있을 것이다. 이번 포스팅에서는 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).

 

위 코드를 실행하면 다음과 같이 깔끔하게 정렬된 것을 알 수 있다.

 


댓글