it-swarm-ja.com

Libreofficeで十字線のように現在の行と列を強調表示するにはどうすればよいですか?

目のガイドとして、Libreofficeの十字線のように現在の行と列を強調表示するにはどうすればよいですか?

crosshair in Libreoffice

オープン 2011年からの機能リクエスト と非常によく似た質問 openoffice -があるようですが、libreofficeで見つけることができず、現時点ではサポートされていません。 LibreOfficeにこれを行わせるにはどうすればよいですか?

3
Jonas Stein

Luppは最近、この動作にマクロを使用するサンプルスプレッドシートを作成しました。 https://forum.openoffice.org/en/forum/viewtopic.php?t=43531#p431848 に投稿されています。

しかし、彼は次のように述べています AskLOで それ:

この目的のために「マクロ」を使用することは疑わしいアプローチです。このソリューションは、ハード(直接)セルフォーマットを使用しないシートにのみ適用できます...実際には推奨されません!

唯一の良い解決策は、LibreOfficeに実装できるかどうかです。しかし、バグレポートで読んだかもしれないように:

経験豊富な開発者の1人と話す...それは簡単な作業ではありません。実装されない可能性があります。

AskLOでの同じ質問に対する私の回答で述べたように、実用的な解決策は、条件付き書式を使用して奇数行または偶数行に色を追加することです。

[〜#〜]編集[〜#〜]

Luppの例を最初から再現するには、まずツール->マクロ->マクロの整理-> LibreOfficeBasicに移動します。。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

4
Jim K