카테고리 없음

[파이썬] 특정 컬럼을 Alignment = center 정렬하는 방법

우주만물정보담당자 2024. 11. 26. 20:53

파이썬(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 라이브러리에서 DataFrameSeries 데이터를 위치 기반으로 인덱싱하거나 슬라이싱할 때 사용하는 속성입니다. 주로 숫자 인덱스를 기반으로 행(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)는 지정된 워크시트와 열 인덱스에서 중앙 정렬을 적용합니다.
이때 헤더 행은 제외하고 데이터 행부터 적용합니다. 헤더까지 수정하려면 함수를 수정하면 됩니다.

셀_중앙정렬2.py
0.00MB
셀_중앙정렬1.py
0.00MB

 

 

같이보면 좋은 글

 

네이버 서치어드바이저 수집 상태 확인 with 파이썬

티스토리 포스팅 후 네이버 검색엔진에 노출되게 하기 위해서는 네이버 서치어드바이저에 수집요청을 해야 합니다. 네이버 서치어드바이저에 수집 요청 내역에 처리결과가 이전에는 수집요청,

manmul-jeongbo.com

 

[Python] 웹 크롤링 기초 - nth-child 활용방법

웹 크롤링은 데이터를 자동으로 수집하고 처리하는 데 매우 유용합니다. 특히, HTML 구조에서 특정 위치에 있는 요소를 선택할 때 nth-child를 활용하면 효율적인 데이터 수집이 가능합니다. 같은 DO

manmul-jeongbo.com

 

파이썬으로 xml 데이터 날짜로 소팅 방법 안내

파이썬으로 데이터를 많이 핸들링하는 업무가 많다보니 점점 사용이 더 많아지고 있는데 xml 데이터를 가지고 작업을할때 가끔 소팅을 좀 하고싶다라는 생각이 든적이 많았습니다. 파이썬의 많

manmul-jeongbo.com