O Lupp criou recentemente uma planilha de exemplo que usa macros para esse comportamento. Está publicado no link .
No entanto, ele observa em AskLO que:
It's a questionable approach to use "macros" for the purpose. The solution is only applicable to sheets that do not use hard (direct) cell formatting... Not actually recommended!
A única boa solução seria se ela pudesse ser implementada no LibreOffice. Mas como você pode ter lido no relatório de erros:
Talking to one of the experienced developers...it's no trivial task. It might never be implemented.
Como mencionado em minha resposta à mesma pergunta no AskLO, uma solução prática é usar a formatação condicional para adicionar cor a linhas ímpares ou pares.
EDITAR :
Para reproduzir o exemplo de Lupp começando do zero, primeiro vá para Ferramentas - > Macros - > Organize Macros - > LibreOffice Basic. Encontre o documento .ods, pressione Novo para criar um novo módulo e coloque o seguinte código no módulo.
Global focusCellAddressGl As String, columnWithFocusCellGl As Long, rowWithFocusCellGl As Long
Function focusCell(Optional pCtrl) As Object
REM Concept by "uros", "Villeroy"
REM Responsible for this variant: Wolfgang Jäger
REM 2017-09-28 V0
On Error Goto eExit
If IsMissing(pCtrl) Then pCtrl = ThisComponent.CurrentController
If NOT pCtrl.SupportsService("com.sun.star.sheet.SpreadsheetView") Then Exit Function
Dim theSheet As Object, fC As Object, sheetNum As Long, sInfo As String, sInfoDelim As String
Dim vD, vDSplit, sInfoSplit
vD = pCtrl.ViewData
vDSplit = Split(vD, ";")
theSheet = pCtrl.ActiveSheet's(sheetNum)
sheetNum = theSheet.RangeAddress.Sheet
sInfo = vDSplit(sheetNum + 3)
REM For CellAddress.Row >= 8192 the "+" is used as the subdelimiter in ViewData. WHY?
If InStr(sInfo, "+")>0 Then
sInfoDelim = "+"
Else
sInfoDelim = "/"
End If
sInfoSplit = Split(sInfo, sInfoDelim)
fC = theSheet.GetCellByPosition(sInfoSplit(0), sInfoSplit(1))
focusCell = fC
eExit:
End Function
Function focusCellAddress(Optional pDummy)
On Error Goto eExit
If focusCellAddressGl="" Then onSelectionChanged(NULL)
focusCellAddress=focusCellAddressGl
eExit:
End Function
Function columnWithFocusCell(Optional pDummy)
On Error Goto eExit
If columnWithFocuscellGl=0 Then onSelectionChanged(NULL)
columnWithFocusCell=columnWithFocusCellGl
eExit:
End Function
Function rowWithFocusCell(Optional pDummy)
On Error Goto eExit
If rowWithFocuscellGl=0 Then onSelectionChanged(NULL)
rowWithFocusCell=rowWithFocusCellGl
eExit:
End Function
Sub onSelectionChanged(pEvent)
On Error Goto eExit
tFC=focusCell()
focusCellAddressGl=Split(tFC.AbsoluteName,".")(1)
With tFC.CellAddress
columnWithFocusCellGl=.Column+1
rowWithfocusCellGl=.Row+1
End With
specCell=tFC.Spreadsheet.GetCellByPosition(0,0)
specCell.String = tFC.AbsoluteName
eExit:
End Sub
Agora, clique com o botão direito do mouse na guia da planilha atual e escolha Sheet Events . Atribuir onSelectionChanged
ao evento "Seleção alterada".
Além disso, crie o estilo cfFocusCross
com uma cor de plano de fundo.
Por fim, vá para Formatar - > Formatação condicional - > Gerenciar - > Adicionar.
- A fórmula é
OR(ROW(A1)=ROWWITHFOCUSCELL();COLUMN(A1)=COLUMNWITHFOCUSCELL())+N($A$1)*0
- Aplicar estilo
cfFocusCross
- Intervalo
A1:Z100