Rack längen werden in ihrer gesplitteten Form (Rack 2-0, Rack 2-1) aus routing.py an drawdxf.py übergeben und in Excel Ausgabe aufgenommen. c-, v-, t-, und d-Racks werden ignoriert

This commit is contained in:
2025-07-01 11:20:01 +02:00
parent 8389164e5d
commit 7c2e171f7d
2 changed files with 34 additions and 6 deletions
+19 -3
View File
@@ -2,7 +2,7 @@ import argparse
import ezdxf
import json
import os.path
from dataclasses import dataclass, asdict, fields
from dataclasses import dataclass, asdict, field
from dacite import from_dict
from typing import List, Dict
from datetime import datetime
@@ -52,6 +52,7 @@ class Polylines:
errors_dists_not_in_layout: List[str]
errors_sensors_not_in_layout: List[str]
errors_missing_attributes: Dict[str, str]
rack_lengths: Dict[str, float] = field(default_factory = dict)
def add_polyline(msp, points:Polyline, dxf_attribs):
@@ -283,7 +284,7 @@ def mark_missings(all_artnrs):
def write_excel_from_json(plines: Polylines, sens2cable: dict, outpath: str, with_bom=True):
"""
Orchestriert die Erstellung der Excel-Reports (Kabelübersicht und Stückliste).
Steuert die Erstellung der Excel-Reports (Kabelübersicht und Stückliste).
"""
# 1. Daten aggregieren und für die Reports vorbereiten
processed_data = _process_cable_data(plines, sens2cable)
@@ -293,8 +294,9 @@ def write_excel_from_json(plines: Polylines, sens2cable: dict, outpath: str, wit
_create_cable_list_sheet(wb_main.active, plines, sens2cable, bezeichner_cfg)
_create_cable_summary_sheet(wb_main.create_sheet(), processed_data)
_create_rack_lengths_sheet(wb_main.create_sheet(), plines)
_create_error_sheets(wb_main, plines)
wb_main.save(outpath)
print("Cable-Summary exported to Excel file")
@@ -402,6 +404,20 @@ def _create_cable_summary_sheet(ws, processed_data):
length_summary.get(artnr, "")
])
def _create_rack_lengths_sheet(ws, plines):
"""Erstellt das Arbeitsblatt 'Rack-Lengths'."""
ws.title = "Rack-Lengths"
ws.append(["Rack-ID", "Length (m)"])
ws.column_dimensions['A'].width = 18
ws.column_dimensions['B'].width = 15
for rackname, length in plines.rack_lengths.items():
classifier = rackname[0]
if classifier in ("t", "v", "c", "d"):
continue
else:
ws.append([rackname, length])
def _create_error_sheets(wb, plines):
"""Erstellt die Arbeitsblätter für alle aufgetretenen Fehler."""
# Sheet: ERR-Equipment-Connection