4

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

перекрестие в Либреофисе

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

1 ответ1

3

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

электронная таблица с выделенной строкой и столбцом

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .