Erzeugt einen sortierten DataFrame. Bei leerer Liste (z.B. SPS ohne Ausgänge) wird ein leerer DataFrame mit den erwarteten Spalten erzeugt, damit Sortierung und spätere Spaltenzugriffe nicht mit KeyError abbrechen.

This commit is contained in:
2026-10-21 10:31:02 +02:00
parent 22e9796593
commit 40eb51a6fd
4 changed files with 23 additions and 8 deletions
+19 -6
View File
@@ -10,6 +10,16 @@ class ExcelConverter:
self.eingaenge_identifier = ["FDI", "B", "S", "E", "I", "DI", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BJ", "BK", "BL", "BM", "BN", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", "FA", "FB", "FC", "FD", "FE", "FF", "FG", "FH", "FJ", "FK", "FL", "FM", "FN", "FP", "FQ", "FR", "FS", "FT", "FU", "FV", "FW", "FX", "FY", "FZ", "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH", "SJ", "SK", "SL", "SM", "SN", "SP", "SQ", "SR", "SS", "ST", "SU", "SV", "SW", "SX", "SY", "SZ"]
self.ausgaenge_identifier = ["K", "O", "Q", "M", "A", "P", "DQ", "CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CJ", "CK", "CL", "CM", "CN", "CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ", "EA", "EB", "EC", "ED", "EE", "EF", "EG", "EH", "EJ", "EK", "EL", "EM", "EN", "EP", "EQ", "ER", "ES", "ET", "EU", "EV", "EW", "EX", "EY", "EZ", "GA", "GB", "GC", "GD", "GE", "GF", "GG", "GH", "GJ", "GK", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GV", "GW", "GX", "GY", "GZ", "HA", "HB", "HC", "HD", "HE", "HF", "HG", "HH", "HJ", "HK", "HL", "HM", "HN", "HP", "HQ", "HR", "HS", "HT", "HU", "HV", "HW", "HX", "HY", "HZ", "KA", "KB", "KC", "KD", "KE", "KF", "KG", "KH", "KJ", "KK", "KL", "KM", "KN", "KP", "KQ", "KR", "KS", "KT", "KU", "KV", "KW", "KX", "KY", "KZ", "MA", "MB", "MC", "MD", "ME", "MF", "MG", "MH", "MJ", "MK", "ML", "MM", "MN", "MP", "MQ", "MR", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PJ", "PK", "PL", "PM", "PN", "PP", "PQ", "PR", "PS", "PT", "PU", "PV", "PW", "PX", "PY", "PZ", "QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH", "QJ", "QK", "QL", "QM", "QN", "QP", "QQ", "QR", "QS", "QT", "QU", "QV", "QW", "QX", "QY", "QZ", "RA", "RB", "RC", "RD", "RE", "RF", "RG", "RH", "RJ", "RK", "RL", "RM", "RN", "RP", "RQ", "RR", "RS", "RT", "RU", "RV", "RW", "RX", "RY", "RZ", "TA", "TB", "TC", "TD", "TE", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TP", "TQ", "TR", "TS", "TT", "TU", "TV", "TW", "TX", "TY", "TZ"]
def _sortierter_df(self, eintraege, sortierung, spalten):
"""
Erzeugt einen sortierten DataFrame. Bei leerer Liste (z.B. SPS ohne Ausgänge)
wird ein leerer DataFrame mit den erwarteten Spalten erzeugt, damit Sortierung
und spätere Spaltenzugriffe nicht mit KeyError abbrechen.
"""
if not eintraege:
return pd.DataFrame(columns=spalten)
return pd.DataFrame(eintraege).sort_values(by=sortierung)
def _gleiche_finden(self, liste):
counter = {}
for eintrag in liste:
@@ -147,8 +157,9 @@ class ExcelConverter:
gleiche_ausgaenge, ausgaenge = self._verarbeite_io_liste(ausgaenge)
# DataFrames erzeugen u. sortieren
df_eingaenge = pd.DataFrame(eingaenge).sort_values(by="Name")
df_ausgaenge = pd.DataFrame(ausgaenge).sort_values(by="Name")
spalten = ['Name', 'Kommentar', 'Zeile']
df_eingaenge = self._sortierter_df(eingaenge, "Name", spalten)
df_ausgaenge = self._sortierter_df(ausgaenge, "Name", spalten)
df_gleiche_eingaenge = pd.DataFrame(gleiche_eingaenge).sort_values(by="Name") if gleiche_eingaenge else pd.DataFrame()
df_gleiche_ausgaenge = pd.DataFrame(gleiche_ausgaenge).sort_values(by="Name") if gleiche_ausgaenge else pd.DataFrame()
@@ -218,8 +229,9 @@ class ExcelConverter:
gleiche_ausgaenge, ausgaenge = self._verarbeite_io_liste(ausgaenge)
# DataFrames erstellen u. sortieren
df_eingaenge = pd.DataFrame(eingaenge).sort_values(by="Zahl")
df_ausgaenge = pd.DataFrame(ausgaenge).sort_values(by="Zahl")
spalten = ['Name', 'NameOriginal', 'NameConstant', 'Kommentar', 'Zahl', 'Zeile']
df_eingaenge = self._sortierter_df(eingaenge, "Zahl", spalten)
df_ausgaenge = self._sortierter_df(ausgaenge, "Zahl", spalten)
df_gleiche_eingaenge = pd.DataFrame(gleiche_eingaenge).sort_values(by="Zahl") if gleiche_eingaenge else pd.DataFrame()
df_gleiche_ausgaenge = pd.DataFrame(gleiche_ausgaenge).sort_values(by="Zahl") if gleiche_ausgaenge else pd.DataFrame()
@@ -362,8 +374,9 @@ class ExcelConverter:
gleiche_ausgaenge, ausgaenge = self._verarbeite_io_liste(ausgaenge)
# DataFrames erzeugen u. sortieren
df_eingaenge = pd.DataFrame(eingaenge).sort_values(by="Name")
df_ausgaenge = pd.DataFrame(ausgaenge).sort_values(by="Name")
spalten = ['Name', 'Kommentar', 'Zeile', 'Bezug']
df_eingaenge = self._sortierter_df(eingaenge, "Name", spalten)
df_ausgaenge = self._sortierter_df(ausgaenge, "Name", spalten)
df_gleiche_eingaenge = pd.DataFrame(gleiche_eingaenge).sort_values(by="Name") if gleiche_eingaenge else pd.DataFrame()
df_gleiche_ausgaenge = pd.DataFrame(gleiche_ausgaenge).sort_values(by="Name") if gleiche_ausgaenge else pd.DataFrame()
+1 -1
View File
@@ -118,7 +118,7 @@ def do_export(conv_obj:ExcelConverter, mode_str, base_input, output_dir, lines,
conv_obj.export_excel(lines, export_type, export_path, getpos_errors, getpos_warnings)
print(f"Export '{export_type}' erfolgreich: {export_path}")
except Exception as e:
print(f"Fehler bei Export '{export_type}': {e}")
print(f"Fehler bei Export '{export_type}' ({export_path}): {type(e).__name__}: {e}")
def do_exports(converter, export_mode, output_dir, base_input, lines, getpos_errors=None, getpos_warnings=None):
if export_mode: