from typing import List from openpyxl import Workbook from openpyxl.styles import Font from ..types import ReportRow from .base import Formatter class XLSXFormatter(Formatter): """Форматтер для экспорта отчёта в Excel (.xlsx).""" def __init__(self, **_kwargs): super().__init__() def format(self, rows: List[ReportRow]) -> Workbook: wb = Workbook() ws = wb.active ws.title = "Report" headers = ["Project", "Version", "Issue ID", "Subject", "Status", "Spent Time"] ws.append(headers) for cell in ws[1]: cell.font = Font(bold=True) for r in rows: ws.append( [ r["project"], r["version"], r["issue_id"], r["subject"], r["status_ru"], r["time_text"], ] ) return wb def save(self, rows: List[ReportRow], output_path: str) -> None: wb = self.format(rows) wb.save(output_path)