Как выделить текущую строку и столбец как перекрестие в Libreoffice?

844
Jonas Stein

Как я могу выделить текущую строку и столбец как перекрестие в Libreoffice в качестве руководства для глаз?

crosshair in Libreoffice

Кажется, есть запрос на открытую функцию от 2011 года и очень похожий вопрос для openoffice - но на данный момент я ничего не могу найти на libreoffice и поддерживать. Как я могу получить LibreOffice для этого?

4

1 ответ на вопрос

3
Jim K

Lupp недавно создал пример электронной таблицы, которая использует макросы для этого поведения. Он размещен по адресу https://forum.openoffice.org/en/forum/viewtopic.php?t=43531#p431848 .

Тем не менее, он отмечает в AskLO, что:

Это сомнительный подход к использованию «макросов» для этой цели. Решение применимо только к листам, которые не используют жесткое (прямое) форматирование ячеек ... На самом деле не рекомендуется!

Единственное хорошее решение было бы, если бы оно могло быть реализовано в LibreOffice. Но, как вы, возможно, прочитали в отчете об ошибке:

Разговор с одним из опытных разработчиков ... это не тривиальная задача. Это никогда не может быть реализовано.

Как упоминалось в моем ответе на тот же вопрос о AskLO, практическим решением является использование условного форматирования для добавления цвета в нечетные или четные строки.

РЕДАКТИРОВАТЬ :

Чтобы воспроизвести пример Lupp с нуля, сначала перейдите в Инструменты -> Макросы -> Организовать макросы -> LibreOffice Basic. Найдите документ .ods, нажмите « Создать», чтобы создать новый модуль, и вставьте в него следующий код.

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  

Теперь щелкните правой кнопкой мыши вкладку текущего листа и выберите « События листа» . Присвойте onSelectionChangedсобытию «Выбор изменен».

Также создайте стиль cfFocusCrossс цветом фона.

Наконец, перейдите в Формат -> Условное форматирование -> Управление -> Добавить.

  • Формула OR(ROW(A1)=ROWWITHFOCUSCELL();COLUMN(A1)=COLUMNWITHFOCUSCELL())+N($A$1)*0
  • Применить стиль cfFocusCross
  • Спектр A1:Z100

spreadsheet with row and column highlighted

Я предлагаю добавить полный код здесь, потому что пользователи, вероятно, все еще будут посещать страницу sx, когда форум уже перемещен, переключил программное обеспечение или URL-адрес мертв. Jonas Stein 6 лет назад 0
@Jonas Stein: ОК, код был добавлен вместе с инструкциями. Jim K 6 лет назад 0

Похожие вопросы