Files
kadastr-17/services/output_generator.py
2026-03-10 20:21:31 +05:00

81 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Генерация итоговых файлов: объединённая форма и Таблица 4."""
import copy
import re
from openpyxl import load_workbook, Workbook
from openpyxl.styles import Font
from services.form_filler import BASE_FONT
def make_filename(kv: str, zu_file: str) -> str:
"""
Формат: {кв_через_подчёркивание}_{zu_file}.xlsx
Пример: 74_34_0400007_выявл1_{вымпел_100}.xlsx
"""
kv_clean = str(kv).replace(":", "_")
safe = re.sub(r'[<>"/\\|?*]', "_", str(zu_file))
return f"{kv_clean}_{safe}.xlsx"
def combine_forms(form_paths: list, combined_path: str):
"""Объединить все формы в один лист."""
combined_wb = Workbook()
combined_ws = combined_wb.active
combined_ws.title = "Все формы"
current_row = 1
for path in form_paths:
src_wb = load_workbook(path, data_only=True)
src_ws = src_wb.active
last_cell = None
for src_row in src_ws.iter_rows():
for cell in src_row:
dst = combined_ws.cell(
row=current_row + cell.row - 1,
column=cell.column,
)
dst.value = cell.value
if cell.has_style:
dst.font = copy.copy(cell.font)
dst.border = copy.copy(cell.border)
dst.fill = copy.copy(cell.fill)
dst.number_format = cell.number_format
dst.alignment = copy.copy(cell.alignment)
last_cell = cell
if last_cell:
src_row_dim = src_ws.row_dimensions[last_cell.row]
combined_ws.row_dimensions[current_row + last_cell.row - 1].height = src_row_dim.height
current_row += src_ws.max_row
if form_paths:
src_wb = load_workbook(form_paths[0])
src_ws = src_wb.active
for col_letter, col_dim in src_ws.column_dimensions.items():
combined_ws.column_dimensions[col_letter].width = col_dim.width
combined_wb.save(combined_path)
def generate_table4(generated: list, output_path: str):
"""Перечень заполненных форм (Таблица 4)."""
wb = Workbook()
ws = wb.active
ws.title = "Перечень форм"
F = BASE_FONT
headers = ["№ п/п", "Кадастровый квартал", "Название файла ЗУ", "Имя файла", "Путь"]
for col_idx, h in enumerate(headers, 1):
ws.cell(row=1, column=col_idx, value=h).font = Font(
name="Times New Roman", size=11, bold=True
)
for i, rec in enumerate(generated, 1):
row = i + 1
ws.cell(row=row, column=1, value=i).font = copy.copy(F)
ws.cell(row=row, column=2, value=rec["kv"]).font = copy.copy(F)
ws.cell(row=row, column=3, value=rec["zu_file"]).font = copy.copy(F)
ws.cell(row=row, column=4, value=rec["name"]).font = copy.copy(F)
ws.cell(row=row, column=5, value=rec["path"]).font = copy.copy(F)
wb.save(output_path)