打开/Libre Office 宏以滚动视图到选择

Posted

技术标签:

【中文标题】打开/Libre Office 宏以滚动视图到选择【英文标题】:Open/Libre Office macro to scroll view to selection 【发布时间】:2016-04-03 13:44:57 【问题描述】:

在 Writer 中,我想搜索一些文本,并在找到后将视图定位到视图/窗口的顶部。

使用下面的代码,

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.SearchString"
args1(0).Value = ":"

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

视图发生了变化,它显示了选择,但它不在任何特定的位置。我希望它位于窗口/视图的顶部。

我还在其他地方发现了 ThisComponent.currentController.getViewData()restoreViewData() 的用法。因此,我进行了实验并确定了如何更改返回的数据以获得垂直滚动,但没有任何反应。比如……

vd = ThisComponent.currentController.getViewData()
vdParts = Split(vd, ";")
vdParts(6) = CLng(vdParts(6)) + 1000
vd = join(vdParts, ";")
ThisComponent.currentController.restoreViewData(vd)

有什么建议吗?

PS:我在 Windows 7 x64 上运行版本 5.0.5.2

【问题讨论】:

【参考方案1】:

电子表格有View Panes可以操作,但在Writer中貌似没有类似的界面。

改为使用View Cursor 向下翻一页或两页,然后移回搜索结果的位置。

此外,请勿使用调度程序进行搜索。请改用 API,如 Andrew Pitonyak's macro document 的第 7.14 节。

【讨论】:

谢谢吉姆。我确实尝试了视图光标,但在我的实验中,视图光标并没有更改视图以显示选择。然后我想起了调度程序示例并想尝试一下,我很惊喜 做到了。 在发布之前的评论并看到其他人提出的 Jim 的建议后,我意识到从编辑器运行宏时视图没有被刷新。我必须分配一个键盘快捷键并以这种方式运行宏才能让它改变视图......一个设计缺陷??? 我通常不会从编辑器运行宏,因为这会使编辑器成为当前组件(这可能很有用,但在这种情况下不是我们想要的)。相反,我通常使用键盘快捷键去Tools -> Macros -> Run Macro。为了能够从编辑器运行,而不是使用 ThisComponent,而是使用文本文档的组件,以 desktop.getComponents() 开头。 Jim,检查Andrew's macro document,它在不止一个地方说ThisComponent 在使用IDE 时不会改变(参见第3.6.9.2 节),它继续指向最后一个文件。从 OOo 的 v2 开始就是这样。另一方面,StarDesktop.getCurrentComponent() 在使用时会指向 IDE。

以上是关于打开/Libre Office 宏以滚动视图到选择的主要内容,如果未能解决你的问题,请参考以下文章

[Libre|Open]Office 中当前文档的路径

在 Open/Libre/Neo Office 中查找文本选择中的段落的宏

插入 HTML Libre Office

如何在 Libre Office 中打开文件并将其保存为 .doc 文件?

Libre Office 自定义对话框表

使用命令行使用 Libre Office 将 xls 转换为 dbf