Profile picture

[Python] openpyxl로 excel 행과 열 크기 조작하기

JaehyoJJAng2024년 05월 25일

개요

openpyxl 라이브러리를 사용하여 크롤링된 데이터를 엑셀로 넘기는 작업을 하고 있는데

이 때, 행 높이, 열 너비, 폰트 등을 조작하는 스크립트를 기록해놓으려고 한다.


스크립트

from openpyxl import Workbook
from openpyxl.styles import Font, Border, Side

class SaveData():
    def __init__(self) -> None:
        self.wb: Workbook = Workbook()
        self.ws = self.wb.active
        self.row: int = 2
        self.dir_name: str = 'datas'
        self.create_dir()
        self.setup_headers()

    def create_dir(self) -> None:
        if not os.path.exists(self.dir_name):
            os.makedirs(self.dir_name)

    def setup_headers(self) -> None:
        headers = ['카페명', '닉네임', '회원 ID']
        self.ws.append(headers)

        # 서식 설정: 굵은 글자와 굵은 테두리
        bold_font = Font(bold=True)
        thick_border = Border(
            left=Side(style='thick'),
            right=Side(style='thick'),
            top=Side(style='thick'),
            bottom=Side(style='thick')
        )

        # 헤더에 서식 적용
        for col_num, header in enumerate(headers, 1):
            cell = self.ws.cell(row=1, column=col_num)
            cell.font = bold_font
            cell.border = thick_border

        # 열 너비 설정 (열 A, B, C의 너비 설정)
        self.ws.column_dimensions['A'].width = 20  # '카페명' 열 너비
        self.ws.column_dimensions['B'].width = 15  # '닉네임' 열 너비
        self.ws.column_dimensions['C'].width = 15  # '회원 ID' 열 너비

        # 첫 번째 행(헤더)의 높이 설정
        self.ws.row_dimensions[1].height = 25

    def save(self, user_infos: dict) -> None:
        file_name: str = os.path.join(self.dir_name, user_infos['categoryName'] + '.xlsx')
        self.ws[f'A{self.row}'] = user_infos['categoryName']
        self.ws[f'B{self.row}'] = user_infos['nickname']
        self.ws[f'C{self.row}'] = user_infos['memberId']

        # 각 행의 높이 설정 (필요에 따라 높이 조절)
        self.ws.row_dimensions[self.row].height = 20

        self.row += 1
        self.wb.save(filename=file_name)

    def __del__(self) -> None:
        self.wb.close()

위 스크립트는 openpyxl을 써서 엑셀 파일에 데이터를 저장하는 클래스다. 주요 기능을 정리하면:

  • 엑셀 파일 생성: Workbook 객체를 만들어서 기본 시트를 사용한다.
  • 디렉토리 생성: 데이터를 저장할 naver-users 디렉토리가 없으면 자동으로 만든다.
  • 헤더 설정 및 서식 적용: 첫 번째 행에 '카페명', '닉네임', '회원 ID'라는 헤더를 추가하고, 굵은 글씨랑 굵은 테두리 서식을 적용한다. 열 너비랑 행 높이도 설정한다.
  • 데이터 저장: save() 메서드로 사용자 정보를 받아서 엑셀 파일에 저장한다. 저장할 때마다 행 높이도 설정한다.
  • 엑셀 파일 저장 및 닫기: 데이터를 저장할 때마다 엑셀 파일을 지정된 경로에 저장하고, 객체가 삭제될 때 엑셀 파일을 닫는다.
  • 이 클래스는 데이터 저장, 서식 설정, 디렉토리 생성 같은 걸 자동으로 처리해준다.

Loading script...