De las diversas soluciones disponibles, para mí parece que es mejor ocultar las filas y columnas. Aquí hay una subrutina que lo hará automáticamente:
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
Por ejemplo, se podría llamar a la siguiente rutina cuando se abre el documento ( Tools -> Customize -> Events
):
Sub DoHideRowsAndCols
HideRowsAndColumns(20,10)
End Sub
En LibreOffice, AutoFilter
no mostró las filas. Sin embargo, lo hizo en Apache OpenOffice. Entonces, para AOO, la rutina necesitaría ser llamada nuevamente después de hacer un AutoFilter
.
Otra alternativa es que, en lugar de ocultar las celdas, protéjalas para evitar su edición. Ver https://ask.libreoffice.org/en/question/17106/is-it-possible-to-impose-a-limit-columns-and-rows-on-spreadsheet-size/ .
Es posible agregar un controlador de eventos para evitar desplazarse más allá de ciertas filas. Para ver un ejemplo de un controlador de eventos de hoja de cálculo, consulte https://stackoverflow.com/questions/35240690/how-to-scroll-all-libreoffice-calc-spreadsheet-sheets-together-or-other-3d-li/35244220# 35244220 .
Sin embargo, creo que agregar un controlador de este tipo sería muy irritante para el usuario. Intentarían hacer clic en una celda solo para que no pasara nada, o tal vez la vista volvería repentinamente a la vista original.