Das várias soluções disponíveis, para mim, parece que esconder as linhas e colunas é melhor. Aqui está uma sub-rotina que fará isso automaticamente:
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 exemplo, a seguinte rotina pode ser chamada quando o documento é aberto ( Tools -> Customize -> Events
):
Sub DoHideRowsAndCols
HideRowsAndColumns(20,10)
End Sub
No LibreOffice, AutoFilter
não reexibiu as linhas. No entanto, ele fez no Apache OpenOffice. Então, para o AOO, a rotina precisaria ser chamada novamente depois de fazer um AutoFilter
.
Outra alternativa é que, em vez de esconder as células, proteja-as para impedir a edição. Veja link .
Pode ser possível adicionar um manipulador de eventos para evitar a rolagem além de certas linhas. Para obter um exemplo de um manipulador de eventos de planilha, consulte link .
No entanto, acho que adicionar esse manipulador seria muito irritante para o usuário. Eles tentariam clicar em uma célula apenas para que nada acontecesse, ou talvez a visualização voltasse de repente para a visualização original.