본문 바로가기
프로그래밍/엑셀(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).

 

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

 


댓글


맨 위로