如何一起滚动所有工作表(或其他类似 ~3D 的想法)
How to scroll all sheets together (or other ~3D-like ideas)
我想要一个“3D”传播sheet,目的是在普通二维单元格中有主要条目,然后(可能同样重要)在每个单元格上方的第三维中有条目。这就是多个 sheet 已经允许的,问题是我不能轻易地一次看到所有的第 3 维单元格。
我最初希望找到一些使用实际 3D sheet 的复杂方法,但到目前为止没有成功。我意识到,如果我只能确保其他 sheet 与我的第一个 sheet 对齐,那就足够了,所以我可以 "scroll" 通过在第三个维度之间切换sheets.
那么,有什么方法可以将所有 sheet 滚动到一起吗?
这样,如果我在 sheet 1 上向下滚动以查看单元格 123 A,当我切换到 sheet 2 时,单元格 123 A 位于屏幕上的相同位置,依此类推sheets 3 及以上。
如果这是不可能的,但有人对不同的解决方案有建议(甚至使用不同的程序(在 Linux)),那就太好了。
这是 OpenOffice Basic 中的完整工作解决方案:
Global OldSheet As Object
Global HandlingActivationEvent As Boolean
Sub RegisterMyActivationEventListener
oListener = CreateUnoListener( _
"ActivListener_", "com.sun.star.sheet.XActivationEventListener" )
oController = ThisComponent.CurrentController
oController.addActivationEventListener(oListener)
OldSheet = oController.ActiveSheet
HandlingActivationEvent = False
MsgBox "Now Listening"
End Sub
Sub ActivListener_activeSpreadsheetChanged( oEvent )
If HandlingActivationEvent Then
Exit Sub
End If
HandlingActivationEvent = True
oController = ThisComponent.CurrentController
newSheet = oController.ActiveSheet
oController.setActiveSheet(OldSheet)
col = oController.getFirstVisibleColumn()
row = oController.getFirstVisibleRow()
oController.setActiveSheet(newSheet)
oController.setFirstVisibleColumn(col)
oController.setFirstVisibleRow(row)
'MsgBox col & ", " & row
OldSheet = newSheet
HandlingActivationEvent = False
End Sub
要使其正常工作,请转至 Tools -> Customize
。在“事件”选项卡中,将 RegisterMyActivationEventListener
分配给 Open Document
事件。
代码解释:
它不会同时滚动 sheet,而是在激活不同的 sheet 时滚动到相应的单元格。它使用 XViewPane 界面查看前一个 sheet 滚动到的位置,并将下一个 sheet 滚动到同一位置。
要查明 sheet 何时被激活,代码使用 an event listener for the XActivationEventListener 接口。
我想要一个“3D”传播sheet,目的是在普通二维单元格中有主要条目,然后(可能同样重要)在每个单元格上方的第三维中有条目。这就是多个 sheet 已经允许的,问题是我不能轻易地一次看到所有的第 3 维单元格。
我最初希望找到一些使用实际 3D sheet 的复杂方法,但到目前为止没有成功。我意识到,如果我只能确保其他 sheet 与我的第一个 sheet 对齐,那就足够了,所以我可以 "scroll" 通过在第三个维度之间切换sheets.
那么,有什么方法可以将所有 sheet 滚动到一起吗?
这样,如果我在 sheet 1 上向下滚动以查看单元格 123 A,当我切换到 sheet 2 时,单元格 123 A 位于屏幕上的相同位置,依此类推sheets 3 及以上。
如果这是不可能的,但有人对不同的解决方案有建议(甚至使用不同的程序(在 Linux)),那就太好了。
这是 OpenOffice Basic 中的完整工作解决方案:
Global OldSheet As Object
Global HandlingActivationEvent As Boolean
Sub RegisterMyActivationEventListener
oListener = CreateUnoListener( _
"ActivListener_", "com.sun.star.sheet.XActivationEventListener" )
oController = ThisComponent.CurrentController
oController.addActivationEventListener(oListener)
OldSheet = oController.ActiveSheet
HandlingActivationEvent = False
MsgBox "Now Listening"
End Sub
Sub ActivListener_activeSpreadsheetChanged( oEvent )
If HandlingActivationEvent Then
Exit Sub
End If
HandlingActivationEvent = True
oController = ThisComponent.CurrentController
newSheet = oController.ActiveSheet
oController.setActiveSheet(OldSheet)
col = oController.getFirstVisibleColumn()
row = oController.getFirstVisibleRow()
oController.setActiveSheet(newSheet)
oController.setFirstVisibleColumn(col)
oController.setFirstVisibleRow(row)
'MsgBox col & ", " & row
OldSheet = newSheet
HandlingActivationEvent = False
End Sub
要使其正常工作,请转至 Tools -> Customize
。在“事件”选项卡中,将 RegisterMyActivationEventListener
分配给 Open Document
事件。
代码解释:
它不会同时滚动 sheet,而是在激活不同的 sheet 时滚动到相应的单元格。它使用 XViewPane 界面查看前一个 sheet 滚动到的位置,并将下一个 sheet 滚动到同一位置。
要查明 sheet 何时被激活,代码使用 an event listener for the XActivationEventListener 接口。