如何在 Libreoffice 中像十字线一样突出显示当前行和列?

如何在 Libreoffice 中像十字线一样突出显示当前行和列?

如何在 Libreoffice 中以十字准线的形式突出显示当前行和列作为眼睛的指导?

Libreoffice 中的十字线

似乎有一个开放的2011 年的功能请求以及一个非常相似的问题开发办公室 - 但目前我在 libreoffice 上找不到任何支持。我怎样才能让 LibreOffice 做到这一点?

答案1

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

突出显示行和列的电子表格

答案2

该功能自 24.2 版起内置于 LibreOffice 中。

可以通过以下方式启用该选项:
工具 ▸ 选项 ▸ LibreOffice Calc ▸ 查看,或通过菜单项视图 ▸ 列/行突出显示。

Libreoffice 24.2 发行说明中的​​信息

相关内容