Lupp hat kürzlich eine Beispielkalkulation erstellt, die Makros für dieses Verhalten verwendet. Es ist auf https://forum.openoffice.org/de/forum/viewtopic.php?t=43531#p431848 veröffentlicht .
Er bemerkt jedoch bei AskLO :
Es ist ein fragwürdiger Ansatz, "Makros" für diesen Zweck zu verwenden. Die Lösung ist nur für Tabellen anwendbar, die keine harte (direkte) Zellformatierung verwenden. Nicht wirklich empfohlen!
Die einzige gute Lösung wäre, wenn sie in LibreOffice implementiert werden könnte. Aber wie Sie vielleicht im Fehlerbericht gelesen haben:
Mit einem der erfahrenen Entwickler sprechen ... es ist keine triviale Aufgabe. Es könnte niemals umgesetzt werden.
Wie in meiner Antwort auf dieselbe Frage in AskLO erwähnt, besteht eine praktische Lösung darin, die bedingte Formatierung zu verwenden, um ungeraden oder geraden Zeilen Farbe hinzuzufügen.
BEARBEITEN :
Um das Beispiel von Lupp von Grund auf zu reproduzieren, gehen Sie zuerst auf Extras -> Makros -> Makros verwalten -> LibreOffice Basic. Suchen Sie das ODS-Dokument, drücken Sie Neu, um ein neues Modul zu erstellen, und fügen Sie den folgenden Code in das Modul ein.
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
Klicken Sie nun mit der rechten Maustaste auf die Registerkarte des aktuellen Arbeitsblatts und wählen Sie Arbeitsblattereignisse . Ordnen Sie onSelectionChanged
das Ereignis "Auswahl geändert" zu.
Erstellen Sie außerdem einen Stil cfFocusCross
mit einer Hintergrundfarbe.
Gehen Sie schließlich zu Format -> Bedingte Formatierung -> Verwalten -> Hinzufügen.
- Formel ist
OR(ROW(A1)=ROWWITHFOCUSCELL();COLUMN(A1)=COLUMNWITHFOCUSCELL())+N($A$1)*0
- Stil anwenden
cfFocusCross
- Angebot
A1:Z100