Как прокрутить все листы вместе (или другие ~ 3D-подобные идеи)

Я хотел бы "трехмерную" электронную таблицу с целью иметь основные записи в обычных 2D-ячейках, а затем (потенциально столь же важные) записи в третьем измерении над каждой ячейкой. Это то, что уже позволяют несколько листов, проблема в том, что я не могу сразу увидеть все ячейки 3-го измерения.

Сначала я надеялся найти какой-нибудь сложный метод использования настоящих 3D-листов, но пока безуспешно. Я понял, что если бы я мог только убедиться, что другие листы совпадают с моим первым листом, то этого было бы достаточно, чтобы я мог «прокручивать» по третьему измерению, переключаясь между листами.

Итак, есть ли способ прокрутить все листы вместе?

Таким образом, если я прокручиваю лист 1 вниз, чтобы увидеть ячейку 123 A, когда я переключаюсь на лист 2, ячейка 123 A находится в той же позиции на экране, и так далее для листов 3 и выше.

Если это невозможно, но у кого-то есть предложения по другому решению (даже с использованием другой программы (в Linux)), это было бы здорово.


person zooombini    schedule 06.02.2016    source источник
comment
Не уверен в точной реализации, но если вы достаточно сообразительны, вы можете реализовать события, о которых говорилось здесь (обработка событий окна) и принудительная прокрутка других листов. Я понятия не имею, насколько громоздким или трудоемким это будет.   -  person Tyler StandishMan    schedule 06.02.2016
comment
Спасибо за предложение. Я определенно недостаточно сообразителен, и похоже, что это все равно специфично для MS Excel, а не для libreoffice или чего-то еще, что я могу использовать в Linux?   -  person zooombini    schedule 06.02.2016
comment
Ах, извините, я не видел его тегов, просто предположил, что это Excel. Надеюсь, вы найдете то, что ищете!   -  person Tyler StandishMan    schedule 06.02.2016


Ответы (1)


Вот полное рабочее решение в 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.

Пояснение кода:

Вместо одновременной прокрутки листов он просто прокручивается до соответствующей ячейки всякий раз, когда активируется другой лист. Он использует интерфейс XViewPane. чтобы увидеть, где прокручивается предыдущий лист, и прокручивает следующий лист до того же места.

Чтобы узнать, когда активируется лист, код использует прослушиватель событий для XActivationEventListener интерфейс.

person Jim K    schedule 06.02.2016
comment
Спасибо, выглядит пугающе, но хорошо! Я никогда раньше не делал ничего с макросами или Basic, поэтому я последовал краткому руководству и сделал макрос Hello World, который, кажется, работает. Где и как реализовать предоставленный вами код? Я попытался скопировать все это в модуль макроса, но это дает ошибку компилятора Expected Sub from the Dim oListener. Надеюсь, это не слишком сложно объяснить с моей полной неопытностью! - person zooombini; 07.02.2016
comment
Хорошо, я пошел дальше и полностью реализовал код. Теперь вы сможете скопировать и вставить его без каких-либо изменений. - person Jim K; 08.02.2016
comment
Я не знаю, увидите ли вы это, @Jim, но мне было интересно, будет ли легко выбрать одну и ту же активную ячейку при переключении листов как часть одного и того же макроса. Я искал и нашел несколько руководств о том, какая ячейка была выбрана, но ни в одном из них не говорилось, как затем установить выбранную ячейку после нахождения строки и столбца. - person zooombini; 18.02.2016
comment
В разделе 6.5.3 макродокумента Эндрю Питоньяка рассказывается, как выбрать ячейку. - person Jim K; 18.02.2016