LibreOffice Impress 宏在演示文稿中使用时只有一半功能,而在外部使用时则没有

LibreOffice Impress 宏在演示文稿中使用时只有一半功能,而在外部使用时则没有

我制作了一个.odp包含两张幻灯片的文件。

幻灯片 1,有一个圆圈,单击时会移动到幻灯片 2。此圆圈使用简单的交互,不使用宏。

幻灯片 2,有一个方块,按下时会隐藏幻灯片 1 上的圆圈,然后移动到幻灯片 1,这样当我们回到幻灯片 1 时,圆圈就消失了。它也使用交互,但它在鼠标单击时运行宏。交互 GUI 指示宏的名称是vnd.sun.star.script:Standard.Module1.Hide?language=Basic&location=document

Sub Hide

REM Define objects
Dim oDoc As Object
Dim oSlideList As Object
Dim oSlide As Object
Dim oSubject As Object
Dim oController As Object

REM oDoc refers to this presentation
oDoc = ThisComponent

REM oSlideList refers to the list of slides
oSlideList = oDoc.getDrawPages()

REM oSlide refers to the first slide
oSlide = oSlideList.getByIndex(0)

REM oSubject refers to the first object of the first slide
oSubject = oSlide.getByIndex(0)

REM Sets oSubject to be invisible
oSubject.Visible = False

REM Moves back to the first slide
oController = oDoc.getCurrentController()
oController.setCurrentPage(oSlide)

End Sub

我启用了宏,然后按 F5 进入演示模式。单击幻灯片 1 中的圆圈,我按预期转到幻灯片 2。但是,单击幻灯片 2 中的方块并没有将我转到幻灯片 1。我按 Esc 退出,以为代码失败了。但我注意到幻灯片 1 中的圆圈不再可见。因此,宏确实执行并隐藏了圆圈,但没有移动到第一张幻灯片。

在不进入演示模式的情况下,在幻灯片 2 中再次显示圆圈后,我右键单击正方形以调出上下文菜单。然后我单击Execute Interaction。圆圈消失了,我回到幻灯片 1。因此,当我不在演示模式时,代码确实完全有效。

最后,再次将圆圈拉回来后,我打开了开发者菜单,找到我的Hide函数并按下Run。代码再次被证明是可以运行的。

我是否使用了错误的 API 来切换幻灯片,导致它在演示时不起作用?如果是这样,我应该如何更改部分oController

答案1

根据https://ask.libreoffice.org/t/impress-jump-to-slide-in-basic-solved/34686/,转到幻灯片索引:

oController.gotoSlideIndex(n)

或者使用以下命令命名幻灯片:

oController.gotoBookmark("Slide name here")

编辑

可以通过以下方式获取控制器:

oController = ThisComponent.getPresentation().getController()

相关内容