из различных доступных обходных путей, мне кажется, что лучше всего скрывать строки и столбцы. Вот подпрограмма, которая сделает это автоматически:
Sub HideRowsAndColumns(iLastVisibleRow As Integer, iLastVisibleCol As Integer)
oController = ThisComponent.CurrentController
oSheet = oController.ActiveSheet
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oCellRange = oSheet.getCellRangeByPosition(_
0, iLastVisibleRow, 0, oSheet.Rows.Count - 1)
oController.select(oCellRange)
dispatcher.executeDispatch(document, ".uno:HideRow", "", 0, Array())
oCellRange = oSheet.getCellRangeByPosition(_
iLastVisibleCol, 0, oSheet.Columns.Count - 1, 0)
oController.select(oCellRange)
dispatcher.executeDispatch(document, ".uno:HideColumn", "", 0, Array())
oCellRange = oSheet.getCellRangeByPosition(0, 0, 0, 0)
oController.select(oCellrange)
End Sub
например, следующая процедура может быть вызвана при открытии документа (Tools -> Customize -> Events):
Sub DoHideRowsAndCols
HideRowsAndColumns(20,10)
End Sub
В LibreOffice, AutoFilter строки не отображаются. Однако он сделал в Apache OpenOffice. Таким образом, для AOO, процедура должна быть вызвана снова после выполнения AutoFilter.
другой альтернативой является то, что вместо того, чтобы скрывать ячейки, защитите их, чтобы предотвратить редактирование. См https://ask.libreoffice.org/en/question/17106/is-it-possible-to-impose-a-limit-columns-and-rows-on-spreadsheet-size/.
можно добавить обработчик событий для предотвращения прокрутки за пределы определенных строк. Пример таблицы обработчиков событий см. https://stackoverflow.com/questions/35240690/how-to-scroll-all-libreoffice-calc-spreadsheet-sheets-together-or-other-3d-li/35244220#35244220.
однако я думаю, что добавление такого обработчика будет очень раздражать пользователя. Они попытаются нажать на ячейку, чтобы ничего не произошло, или, возможно, представление внезапно вернется к исходному виду.