From 7a99ccf5ff06da5dba78e4c5745a0e6e16f4b1c2 Mon Sep 17 00:00:00 2001 From: Yash Suthar Date: Mon, 12 Jan 2026 20:39:56 +0530 Subject: [PATCH] BIM : Preserve Spreadsheet structure (#26736) Signed-off-by: Yash Suthar --- src/Mod/BIM/ArchReport.py | 10 +++++++++- src/Mod/Spreadsheet/App/SheetPyImp.cpp | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Mod/BIM/ArchReport.py b/src/Mod/BIM/ArchReport.py index 7e53338f03..75ee8e08b7 100644 --- a/src/Mod/BIM/ArchReport.py +++ b/src/Mod/BIM/ArchReport.py @@ -687,7 +687,15 @@ class _ArchReport: f"Report '{getattr(obj, 'Label', '')}': No target spreadsheet found.\n" ) return - sp.clearAll() + # clear all the content of the spreadsheet + used_range = sp.getUsedRange() + if used_range: + sp.clear(f"{used_range[0]}:{used_range[1]}") + else: + FreeCAD.Console.PrintError( + f"Report '{getattr(obj, 'Label', '')}': Invalid cell address found, clearing spreadsheet.\n" + ) + sp.clearAll() # Reset the row counter for a new report build. self.spreadsheet_current_row = 1 diff --git a/src/Mod/Spreadsheet/App/SheetPyImp.cpp b/src/Mod/Spreadsheet/App/SheetPyImp.cpp index 65e4a1311b..e74a5712fe 100644 --- a/src/Mod/Spreadsheet/App/SheetPyImp.cpp +++ b/src/Mod/Spreadsheet/App/SheetPyImp.cpp @@ -1102,6 +1102,9 @@ PyObject* SheetPy::getUsedRange(PyObject* args) return nullptr; } auto usedRange = getSheetPtr()->getCells()->getUsedRange(); + if (!std::get<0>(usedRange).isValid()) { + Py_Return; + } Py::Tuple pyTuple(2); pyTuple[0] = Py::String(std::get<0>(usedRange).toString()); pyTuple[1] = Py::String(std::get<1>(usedRange).toString());