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());