Files
ranking/scripts/estilizar_planilha.py

71 lines
2.3 KiB
Python

from __future__ import annotations
from pathlib import Path
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
INPUT_PATH = Path("/home/fred/Downloads/Definição Ranking_ATUACAPES - Aba1 a Aba4(7).xlsx")
OUTPUT_PATH = Path("/home/fred/projetos/ranking/docs/Definicao_Ranking_ATUACAPES_estilizada.xlsx")
def apply_styles() -> None:
wb = load_workbook(INPUT_PATH)
header_fill = PatternFill("solid", fgColor="E6F0FF")
header_font = Font(bold=True, color="102A43")
alt_fill = PatternFill("solid", fgColor="F7FAFC")
thin = Side(style="thin", color="CBD5E0")
border = Border(left=thin, right=thin, top=thin, bottom=thin)
for ws in wb.worksheets:
max_col = ws.max_column
max_row = ws.max_row
# Header styling
for col in range(1, max_col + 1):
cell = ws.cell(row=1, column=col)
cell.fill = header_fill
cell.font = header_font
cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
cell.border = border
# Data rows styling
for row in range(2, max_row + 1):
row_fill = alt_fill if row % 2 == 0 else None
for col in range(1, max_col + 1):
cell = ws.cell(row=row, column=col)
cell.border = border
cell.alignment = Alignment(vertical="top", wrap_text=True)
if row_fill:
cell.fill = row_fill
# Freeze header row
ws.freeze_panes = "A2"
# Auto-filter across the used range
ws.auto_filter.ref = ws.dimensions
# Adjust column widths with caps
for col in ws.columns:
col_letter = col[0].column_letter
max_len = 0
for cell in col[: min(max_row, 200)]:
if cell.value is None:
continue
text = str(cell.value)
if len(text) > max_len:
max_len = len(text)
width = max(12, min(45, int(max_len * 0.9)))
ws.column_dimensions[col_letter].width = width
# Slightly taller header
ws.row_dimensions[1].height = 28
OUTPUT_PATH.parent.mkdir(parents=True, exist_ok=True)
wb.save(OUTPUT_PATH)
if __name__ == "__main__":
apply_styles()