개요
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() 메서드로 사용자 정보를 받아서 엑셀 파일에 저장한다. 저장할 때마다 행 높이도 설정한다.
- 엑셀 파일 저장 및 닫기: 데이터를 저장할 때마다 엑셀 파일을 지정된 경로에 저장하고, 객체가 삭제될 때 엑셀 파일을 닫는다.
- 이 클래스는 데이터 저장, 서식 설정, 디렉토리 생성 같은 걸 자동으로 처리해준다.