From 73c588f661713fca6439ba504a8a63a08cf772bb Mon Sep 17 00:00:00 2001 From: "Felix C. A. Auer" <10127354+FelixCAAuer@users.noreply.github.com> Date: Thu, 8 Oct 2026 12:45:29 +0200 Subject: [PATCH] Fix None-Dataframes when writing using ExcelWriter --- CLAUDE.md | 1 + ExcelWriter.py | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f41bd61..8bac2c1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -29,6 +29,7 @@ See `README.md` for usage, key concepts, and data structure. ### ExcelWriter - All cell styles, column definitions, and table layouts are declared in `TableDefinitions.xml`, not in Python code. When adding a new output table, define its columns there first. +- `CaseStudy` sets a missing optional file's dataframe to `None` (the attribute still exists), so `write_caseStudy` checks `getattr(cs, name, None) is not None`, never `hasattr` alone. - `ExcelWriter.__init__()` parses the XML once and stores resolved objects (`self.columns`, `self.cell_styles`, etc.). Avoid re-instantiating per row. ### SQLiteWriter diff --git a/ExcelWriter.py b/ExcelWriter.py index 9dfaccb..5b353bc 100644 --- a/ExcelWriter.py +++ b/ExcelWriter.py @@ -255,18 +255,18 @@ def write_caseStudy(self, cs: CaseStudy, folder_path: str | Path) -> None: self.write_Power_BusInfo(cs.dPower_BusInfo, folder_path) self.write_Power_Demand(cs.dPower_Demand, folder_path) self.write_Power_Hindex(cs.dPower_Hindex, folder_path) - if hasattr(cs, "dPower_Inflows"): + if getattr(cs, "dPower_Inflows", None) is not None: self.write_Power_Inflows(cs.dPower_Inflows, folder_path) self.write_Power_Network(cs.dPower_Network, folder_path) - if hasattr(cs, "dPower_Storage"): + if getattr(cs, "dPower_Storage", None) is not None: self.write_Power_Storage(cs.dPower_Storage, folder_path) - if hasattr(cs, "dPower_ThermalGen"): + if getattr(cs, "dPower_ThermalGen", None) is not None: self.write_Power_ThermalGen(cs.dPower_ThermalGen, folder_path) - if hasattr(cs, "dPower_VRES"): + if getattr(cs, "dPower_VRES", None) is not None: self.write_Power_VRES(cs.dPower_VRES, folder_path) - if hasattr(cs, "dPower_VRESProfiles"): + if getattr(cs, "dPower_VRESProfiles", None) is not None: self.write_Power_VRESProfiles(cs.dPower_VRESProfiles, folder_path) - if hasattr(cs, "dPower_ImportExport") and cs.dPower_ImportExport is not None: + if getattr(cs, "dPower_ImportExport", None) is not None: self.write_Power_ImportExport(cs.dPower_ImportExport, folder_path) self.write_Power_WeightsK(cs.dPower_WeightsK, folder_path) self.write_Power_WeightsRP(cs.dPower_WeightsRP, folder_path)