your programing

전체 행 Openpyxl에 형식 적용

lovepro 2023. 4. 22. 22:38
반응형

전체 행 Openpyxl에 형식 적용

포맷하고 싶은 엑셀 파일이 있습니다.첫 번째 행(Headers so row2 제외)은 빨간색으로 이탤릭체로 해야 합니다.

Openpyxl 문서에는 다음과 같이 기술되어 있습니다.

전체 행과 열에 스타일을 적용하려면 각 셀에 스타일을 직접 적용해야 합니다.

난 개인적으로 이게 냄새나는 것 같아...회피책은 다음과 같습니다.

import openpyxl
from openpyxl.styles import NamedStyle
from openpyxl import load_workbook
from openpyxl.styles.colors import RED
from openpyxl.styles import Font
# I normally import a lot of stuff... I'll also take suggestions here.

file = 'MY_PATH'
wb = load_workbook(filename=file)
sheet = wb.get_sheet_by_name('Output')

for row in sheet.iter_rows():
    for cell in row:
        if '2' in cell.coordinate:
            # using str() on cell.coordinate to use it in sheet['Cell_here']
            sheet[str(cell.coordinate)].font = Font(color='00FF0000', italic=True)

 wb.save(filename=file)

첫 번째 단점은 다음과 같은 세포가 더 많다는 것입니다.A24my loop이 포맷을 적용합니다.정규 표현으로 고칠 수 있어요.그게 올바른 접근법일까요?

궁극적으로 전체 행에 형식을 적용하는 더 좋은 방법이 있을까요?그리고 좋은 Openpyxl 문서를 찾을 수 있는 길을 가르쳐 줄 사람?저는 이제서야 알게 되었습니다sheet.iter_rows()그리고.cell.coordinates스택에 있습니다.

두 번째 행의 색상만 변경하는 경우 모든 행에서 반복할 필요가 없습니다.단, 다음과 같이 한 행에 걸쳐 반복할 수 있습니다.

import openpyxl
from openpyxl import load_workbook
from openpyxl.styles import Font

file = 'input.xlsx'
wb = load_workbook(filename=file)
ws = wb['Output']
red_font = Font(color='00FF0000', italic=True)

# Enumerate the cells in the second row
for cell in ws["2:2"]:
    cell.font = red_font

wb.save(filename=file)

다음과 같은 것을 제공합니다.

엑셀 스크린샷

여러 셀에 액세스하는 방법에 대해서는 openpyxl 문서를 참조하십시오.다수의 셀에 접속하다

형식"2:2"는 단일 행의 셀을 열거합니다.한다면"2:3"를 사용하면 셀이 한 번에 한 줄씩 반환됩니다.즉, 2행에서 3행으로 반환되므로 추가 루프가 필요합니다.


또는,NamedStyle:

import openpyxl
from openpyxl import load_workbook
from openpyxl.styles import Font, NamedStyle

file = 'input.xlsx'
wb = load_workbook(filename=file)
ws = wb['Output']

# Create a NamedStyle (if not already defined)
if 'red_italic' not in wb.named_styles:
    red_italic = NamedStyle(name="red_italic")
    red_italic.font = Font(color='00FF0000', italic=True)
    wb.add_named_style(red_italic)

# Enumerate the cells in the second row
for cell in ws["2:2"]:
    cell.style = 'red_italic'

wb.save(filename=file)

언급URL : https://stackoverflow.com/questions/42980241/applying-format-to-entire-row-openpyxl

반응형