Low-level peeking into the data file shows that there IS an empty last line. This is because it has a different row style due to a slightly different row height.
Deleting this line in LibreOffice crashes FPSpreadsheet when trying to read this modified file ("Operation at index 5 exceeds the range of defined grid rows (5)"). This happens because I left the cursor in the empty row 5 after deletion, but your code modifies the AutoExpand property of the grid by removing the aeDefault, aeNavigation, and aeData options. Removal of the latter two prevents expansion of the worksheet grid by navigating and by putting data into the not-yet defined grid cells. But putting the active cell into this range just fires this. To avoid this while keeping the restricted display of only the used cells, you must make sure that when the workbook is saved with the cursor in the occupied part of the grid (maybe I should re-think the idea to raise an exception in such a case rather than moving the active cell to some innocent place, e.g. cell A1). Or, of course, leave the AutoExpand property alone - but then you must accept the grid extending to "infinity".
[EDIT]
Committed a more tolerant version of the worksheet grid in which this situation does not cause a crash any more. It is possible, though, that there are still other occasions when the AutoExpand functions can raise an exception.