如何在 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 ▸ 查看,或通过菜单项视图 ▸ 列/行突出显示。