【问题标题】:How to create a macro to jump to the end of a document in Libre Office Basic如何在 Libre Office Basic 中创建宏以跳转到文档的末尾
【发布时间】:2021-11-18 21:05:21
【问题描述】:

每次打开 Libre Office 文档以添加更新时,我都必须按 CTRL+END 才能跳转到文档底部。我想添加一个按钮来跳转到底部,但它使用的 Basic 不是 VBA,所以我处于泡菜中。谁能给我一个子? 作为事后的想法;我可以在文档启动中添加指令吗?光标跳转到文件的底部?请原谅我的裤子命名惯例,我还是绿色的! 我尝试了离线帮助无济于事。接下来我尝试了谷歌,但找不到确切的子匹配。然后我订阅了 TheDocumentFoundation 并获得了一个类似 SO 的问答论坛。迪斯科机器人没有帮助! 我还尝试录制一个可以正常工作的宏。子代码是:

    sub Main
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher =    createUnoService("com.sun.star.frame.DispatchHelper")

    dispatcher.executeDispatch(document, ".uno:GoToEndOfDoc", "",      0, Array())
    end sub

但是,我无法将命令添加到 document.init 或 startup。

【问题讨论】:

  • 欢迎您!您要为一个文档还是为您打开的每个文档执行此操作? Writer 尝试在您上次停止编辑的位置打开文档 - 对每个文档应用“跳转到末尾”会破坏此行为。
  • 就这一份文件。我将它用作临时博客,直到我可以让我的 WP 博客正常工作。我在 LO 中使用的大多数文档很少超过一页。这个目前有 30 多页。

标签: libreoffice-basic


【解决方案1】:

实际上,将光标移动到文档末尾的宏写起来稍微容易一些。每个文档都有一个controller。文本文档控制器有一个"view cursor"。你可以使用its methods控制这个光标,在这种情况下你需要.gotoEnd()方法。

所以代码可以是这样的:“如果这个文档是文本文档,则获取它的控制器,从控制器中取出光标,使光标跳转到文本的末尾”

Sub jumpToEnd(Optional oEvent As Variant)
    If  ThisComponent.SupportsService("com.sun.star.text.TextDocument") Then
        ThisComponent.getCurrentController().getViewCursor().gotoEnd(False)
    EndIf 
End Sub

此宏的最佳位置是标准库中“我的宏”下的某个模块 - 该库将在启动 office 后立即加载,并且可以随时执行宏。 (如果你只想为一个文档运行这个宏,那么你可以把它放在这个文档的标准库中)

要自动运行宏,请使用工具 - 自定义 - 事件选项卡

您可以在此处指定是否应在打开一个特定文档或打开任何文档时执行宏。

既然您知道如何执行此操作,您可能会同意按 Ctrl+End 会容易得多。

【讨论】:

  • 谢谢约翰,它运行良好。我同意最初 CTRL+End 很简单;尽管从长远来看,让文档以自动化方式执行这项次要工作会更有效。伙计,我是否通过添加意见来扭曲 SO 规则!伙计,你摇滚;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多