Мне кажется, что из всех возможных обходных путей лучше всего скрывать строки и столбцы. Вот подпрограмма, которая сделает это автоматически:
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.
Однако я думаю, что добавление такого обработчика было бы очень раздражающим для пользователя. Они будут пытаться щелкнуть по ячейке только для того, чтобы ничего не произошло, или, возможно, представление внезапно вернется к исходному виду.