파이썬(Python)을 활용하여 워크시트가 2개 있는 엑셀 파일에서 특정 컬럼을 중앙 정렬하는 방법을 설명합니다. 본 글은 openpyxl 라이브러리를 사용하며, 하나의 컬럼을 중앙정렬(Alignment = center)하는 방법을 알아보려고 합니다.
두가지 방법중 편한 방법으로 처리하면 될것 같습니다. 저는 개인적으로 두번째 소개해 드리는 방법을 주로 사용합니다.
먼저 데이터를 소개합니다. 데이트는 A학원,B학원을 다니는 상황에서 그날 그날 숙제를 했는지 안했는지를 가지고 한번 처리를 해 보려고 합니다. 국어숙제를 했으면 완료로 처리되고 일자를 확인합니다. 그리고 미완료일때는 숙제를 내준 날짜를 입력하게 됩니다.
# 여러 시트에 들어갈 데이터 생성
data1 = {
'Subject': ['국어', '영어'],
'Status': ['완료', '미완료'],
'uploadDate': ['2024년 11월 22일', '2024년 11월 22일']
}
data2 = {
'Subject': ['역사', '지리'],
'Status': ['미완료', '완료'],
'uploadDate': ['2024년 11월 22일', '2024년 11월 23일']
}
1).워크시트 포맷을 이용해 특정 컬럼을 중앙 정렬하는 방법
먼저 소스를 보고 설명을 하겠습니다.
import pandas as pd
#각 컬럼이 길이 정이
width1=20
width2=20
width3=30
# 여러 시트에 들어갈 데이터 생성
data1 = {
'Subject': ['국어', '영어'],
'Status': ['완료', '미완료'],
'uploadDate': ['2024년 11월 22일', '2024년 11월 22일']
}
data2 = {
'Subject': ['역사', '지리'],
'Status': ['미완료', '완료'],
'uploadDate': ['2024년 11월 22일', '2024년 11월 23일']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 엑셀 파일로 저장하면서 각 시트에서 특정 컬럼 중앙 정렬 적용
excel_file = "학원 숙제 관리.xlsx"
with pd.ExcelWriter( excel_file, engine="xlsxwriter") as writer:
# 첫 번째 시트 작성
df1.to_excel(writer, index=False, sheet_name="A학원")
# 두 번째 시트 작성
df2.to_excel(writer, index=False, sheet_name="B학원")
# 워크북 가져오기
workbook = writer.book
# 중앙 정렬 포맷 정의
center_format = workbook.add_format({"align": "center"})
#각 시트별 길이 조절
writer.sheets['A학원'].set_column(0, 0, width1)
writer.sheets['A학원'].set_column(1, 1, width2)
writer.sheets['A학원'].set_column(2, 2, width3)
writer.sheets['B학원'].set_column(0, 0, width1)
writer.sheets['B학원'].set_column(1, 1, width2)
writer.sheets['B학원'].set_column(2, 2, width3)
# 각 시트에서 중앙 정렬 적용
sheets = {"A학원": df1, "B학원": df2}
for sheet_name, df in sheets.items():
worksheet = writer.sheets[sheet_name]
# uploadDate 열의 인덱스 (엑셀 기준 1부터 시작)
upload_date_col_index = df.columns.get_loc("uploadDate") # 0-based index
# 중앙 정렬 적용 (헤더 제외, 데이터 시작은 2번째 행)
for row in range(1, len(df) + 1):
worksheet.write(row,
upload_date_col_index,
df.iloc[row - 1, upload_date_col_index], center_format)
코드 설명
1). 데이터 추가는 딕셔너리의 키(Subject, Status, uploadDate)를 헤더로 설정하고, 각 행의 데이터를 추가합니다.
2). dataframe을 두개를 설정해 하나는 A학원 데이터로 다른 쉬트는 B학원원으로 df1, df2를 정의한다.
3). add_format을 이용해서 셀의 서식을 정이합니다. 서식은 정렬,색깔등 다양한 셀 서식을 정의할 수 있습니다.
add_format은 다양한 옵션을 제공하여 셀의 스타일을 세부적으로 조정할 수 있습니다. 아래는 자주 사용하는 옵션입니다.
텍스트 관련 옵션
옵션 | 설명 | 예시 |
bold | 글씨를 굵게 설정 | {'bold': True} |
italic | 글씨를 기울임 | {'italic': True} |
font_color | 글씨 색상 | {'font_color': 'red'} |
font_name | 글씨체 설정 | {'font_name': 'Arial'} |
font_size | 글씨 크기 설정 | {'font_size': 12} |
정렬 관련 옵션
옵션 | 설명 | 예시 |
align | 가로 정렬 설정 (left, center, right) | {'align': 'center'} |
valign | 세로 정렬 설정 (top, vcenter, bottom) | {'valign': 'vcenter'} |
text_wrap | 텍스트 줄 바꿈 | {'text_wrap': True} |
배경 및 테두리 관련 옵션
옵션 | 설명 | 예시 |
bg_color | 배경색 설정 | {'bg_color': '#FFFF00'} |
border | 테두리 설정 (값: 0~6으로 테두리 두께 지정 가능) | {'border': 1} |
border_color | 테두리 색상 설정 | {'border_color': 'blue'} |
숫자 및 날짜 형식
옵션 | 설명 | 예시 |
num_format | 숫자/날짜 형식 지정 (0.00, #,##0, yyyy-mm-dd 등) | {'num_format': '0.00'} |
4). iloc를 이용해서 데이터의 속성을 수정합니다. iloc는 Pandas 라이브러리에서 DataFrame 및 Series 데이터를 위치 기반으로 인덱싱하거나 슬라이싱할 때 사용하는 속성입니다. 주로 숫자 인덱스를 기반으로 행(row) 또는 열(column)에 접근할 때 사용됩니다.
2).Alignment 스타일을 사용하여 셀 포맷을 수정하는 방법
좀더 멋스럽게 파이썬 답게 수정을 해 보겠습니다.
먼저 소스를 보시죠
from openpyxl import Workbook
from openpyxl.styles import Alignment
# 데이터 추가 함수 정의
def add_data_to_sheet(ws, data):
# 헤더 추가
headers = list(data.keys())
ws.append(headers)
# 데이터 행 추가
for i in range(len(data['Subject'])):
ws.append([data['Subject'][i], data['Status'][i], data['uploadDate'][i]])
# 중앙 정렬 적용 함수
def center_align_column(ws, col_index):
for row in range(2, ws.max_row + 1): # 헤더 제외 데이터 행부터 적용
cell = ws.cell(row=row, column=col_index)
cell.alignment = center_alignment
# 4. 열 너비 설정 함수
def set_column_width(ws, col_letter, width):
ws.column_dimensions[col_letter].width = width
# 여러 시트에 들어갈 데이터 생성
data1 = {
'Subject': ['국어', '영어'],
'Status': ['완료', '미완료'],
'uploadDate': ['2024년 11월 22일', '2024년 11월 22일']
}
data2 = {
'Subject': ['역사', '지리'],
'Status': ['미완료', '완료'],
'uploadDate': ['2024년 11월 22일', '2024년 11월 23일']
}
# 1. 워크북 생성
wb = Workbook()
# 워크시트 추가
ws1 = wb.active
ws1.title = "A학원"
ws2 = wb.create_sheet(title="B학원")
# 데이터 추가
add_data_to_sheet(ws1, data1)
add_data_to_sheet(ws2, data2)
# 3. 중앙 정렬 설정
center_alignment = Alignment(horizontal='center', vertical='center')
# uploadDate 컬럼의 열 인덱스 (엑셀 기준 3번째 열)
upload_date_col_index = 3
# uploadDate 컬럼 중앙 정렬
center_align_column(ws1, upload_date_col_index)
center_align_column(ws2, upload_date_col_index)
# uploadDate 컬럼 너비를 100으로 설정 (엑셀 열 이름 'C')
set_column_width(ws1, 'C', 100)
set_column_width(ws2, 'C', 100)
# 4. 파일 저장
wb.save("학원 숙제 관리2.xlsx")
코드 설명
1). 데이터 추가는 딕셔너리의 키(Subject, Status, uploadDate)를 헤더로 설정하고, 각 행의 데이터를 추가합니다.
2). Alignment(horizontal='center', vertical='center')를 사용하여 셀 중앙 정렬 스타일을 정의합니다. 이때 특정 컬럼(3번째 컬럼 = uploadDate)에만 적용하도록 설정합니다.
3).center_align_column(ws, col_index)는 지정된 워크시트와 열 인덱스에서 중앙 정렬을 적용합니다.
이때 헤더 행은 제외하고 데이터 행부터 적용합니다. 헤더까지 수정하려면 함수를 수정하면 됩니다.
같이보면 좋은 글
네이버 서치어드바이저 수집 상태 확인 with 파이썬
티스토리 포스팅 후 네이버 검색엔진에 노출되게 하기 위해서는 네이버 서치어드바이저에 수집요청을 해야 합니다. 네이버 서치어드바이저에 수집 요청 내역에 처리결과가 이전에는 수집요청,
manmul-jeongbo.com
[Python] 웹 크롤링 기초 - nth-child 활용방법
웹 크롤링은 데이터를 자동으로 수집하고 처리하는 데 매우 유용합니다. 특히, HTML 구조에서 특정 위치에 있는 요소를 선택할 때 nth-child를 활용하면 효율적인 데이터 수집이 가능합니다. 같은 DO
manmul-jeongbo.com
파이썬으로 xml 데이터 날짜로 소팅 방법 안내
파이썬으로 데이터를 많이 핸들링하는 업무가 많다보니 점점 사용이 더 많아지고 있는데 xml 데이터를 가지고 작업을할때 가끔 소팅을 좀 하고싶다라는 생각이 든적이 많았습니다. 파이썬의 많
manmul-jeongbo.com