Compare commits
No commits in common. "e721beb6dd6ec932ef6406b0ee7a434c1faf6e64" and "ee545e96dc441518cca0a8a16b0895f12de67a32" have entirely different histories.
e721beb6dd
...
ee545e96dc
@ -115,12 +115,6 @@ class ExportService:
|
|||||||
row_normalizer=self.form1_row_normalizer.normalize,
|
row_normalizer=self.form1_row_normalizer.normalize,
|
||||||
value_serializer=self.value_serializer.to_excel_value,
|
value_serializer=self.value_serializer.to_excel_value,
|
||||||
),
|
),
|
||||||
"STRUCTURE": DepthSheetWriter(
|
|
||||||
columns_dict=FORM1_DEPTH_COLUMNS,
|
|
||||||
row_normalizer=self.form1_row_normalizer.normalize,
|
|
||||||
value_serializer=self.value_serializer.to_excel_value,
|
|
||||||
colors_config=FORM1_COLORS["AHR"],
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
self.form3_report_writer = TabularSheetWriter(
|
self.form3_report_writer = TabularSheetWriter(
|
||||||
columns=FORM3_REPORT_COLUMNS,
|
columns=FORM3_REPORT_COLUMNS,
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import abc
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable
|
||||||
|
|
||||||
@ -16,28 +15,7 @@ RowNormalizer = Callable[[dict[str, Any]], dict[str, Any]]
|
|||||||
ValueSerializer = Callable[[Any], Any]
|
ValueSerializer = Callable[[Any], Any]
|
||||||
|
|
||||||
|
|
||||||
class AbstractWriter(abc.ABC):
|
class TabularSheetWriter:
|
||||||
|
|
||||||
def _set_widths(self, worksheet: Worksheet):
|
|
||||||
for col in worksheet.columns:
|
|
||||||
max_len = 0
|
|
||||||
col_letter = get_column_letter(col[0].column) # Get alphabetical column name (e.g., 'A')
|
|
||||||
|
|
||||||
for cell in col:
|
|
||||||
if cell.value is not None:
|
|
||||||
cell_len = len(str(cell.value))
|
|
||||||
if cell_len > max_len:
|
|
||||||
max_len = cell_len
|
|
||||||
|
|
||||||
adjusted_width = max(max_len + 3, 10)
|
|
||||||
worksheet.column_dimensions[col_letter].width = adjusted_width
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def write(self, *args, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class TabularSheetWriter(AbstractWriter):
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
columns: list[tuple[str, str]],
|
columns: list[tuple[str, str]],
|
||||||
@ -56,10 +34,9 @@ class TabularSheetWriter(AbstractWriter):
|
|||||||
worksheet.append(
|
worksheet.append(
|
||||||
[self.value_serializer(normalized.get(key)) for key, _ in self.columns]
|
[self.value_serializer(normalized.get(key)) for key, _ in self.columns]
|
||||||
)
|
)
|
||||||
self._set_widths(worksheet)
|
|
||||||
|
|
||||||
|
|
||||||
class DepthSheetWriter(AbstractWriter):
|
class DepthSheetWriter:
|
||||||
alignment = Alignment(horizontal='center', vertical='center')
|
alignment = Alignment(horizontal='center', vertical='center')
|
||||||
thin_border = Border(
|
thin_border = Border(
|
||||||
left=Side(style='thin'),
|
left=Side(style='thin'),
|
||||||
@ -189,6 +166,20 @@ class DepthSheetWriter(AbstractWriter):
|
|||||||
cell.font = Font(color=color["color"])
|
cell.font = Font(color=color["color"])
|
||||||
return current_column
|
return current_column
|
||||||
|
|
||||||
|
def _set_widths(self, worksheet: Worksheet):
|
||||||
|
for col in worksheet.columns:
|
||||||
|
max_len = 0
|
||||||
|
col_letter = get_column_letter(col[0].column) # Get alphabetical column name (e.g., 'A')
|
||||||
|
|
||||||
|
for cell in col:
|
||||||
|
if cell.value is not None:
|
||||||
|
cell_len = len(str(cell.value))
|
||||||
|
if cell_len > max_len:
|
||||||
|
max_len = cell_len
|
||||||
|
|
||||||
|
adjusted_width = max(max_len + 3, 10)
|
||||||
|
worksheet.column_dimensions[col_letter].width = adjusted_width
|
||||||
|
|
||||||
def _set_color_to_row(self, ws: Worksheet, item_type: str) -> None:
|
def _set_color_to_row(self, ws: Worksheet, item_type: str) -> None:
|
||||||
if not self.palette or item_type in ("SUB_ITEM", "INPUT"):
|
if not self.palette or item_type in ("SUB_ITEM", "INPUT"):
|
||||||
return
|
return
|
||||||
@ -208,12 +199,7 @@ class DepthSheetWriter(AbstractWriter):
|
|||||||
def write(self, worksheet: Worksheet, rows: list[tuple]) -> None:
|
def write(self, worksheet: Worksheet, rows: list[tuple]) -> None:
|
||||||
self._write_header(worksheet)
|
self._write_header(worksheet)
|
||||||
for row in rows:
|
for row in rows:
|
||||||
if len(row) > 3 and isinstance(row[3], dict):
|
raw_data = row[3] if len(row) > 3 and isinstance(row[3], dict) else {}
|
||||||
if row[0] == 'META':
|
|
||||||
continue
|
|
||||||
raw_data = row[3]
|
|
||||||
else:
|
|
||||||
raw_data = {}
|
|
||||||
normalized = self.row_normalizer(raw_data)
|
normalized = self.row_normalizer(raw_data)
|
||||||
worksheet.append(
|
worksheet.append(
|
||||||
[self.value_serializer(normalized.get(key)) for key in self.columns]
|
[self.value_serializer(normalized.get(key)) for key in self.columns]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user