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