【问题标题】:run libreoffice local macro from python?从 python 运行 libreoffice 本地宏?
【发布时间】:2020-06-19 06:08:45
【问题描述】:

在 python 脚本中,我知道我可以在 My Macros 库容器中执行自定义 libreoffice 宏,方法是抓取一个调度程序并执行:

dispatcher.executeDispatch(frame, "macro:///Standard.Module1.mymacro", "", 0, ())

但是如何调用本地文档特定的宏呢?我认为“宏///”有一个替代术语,例如“文档///”,可以使上述调用起作用,但我在任何地方都找不到任何文档。宏调用字符串的正确格式是什么?

【问题讨论】:

  • 好问题。如果您尝试从 Python 脚本调用另一个函数,并且您在 Windows 中,我发现您可以将这些文件放在 Program Files\LibreOffice\program 目录中并且可以导入。

标签: python libreoffice


【解决方案1】:

从文档中获取脚本提供程序并使用它来调用宏。

desktop = XSCRIPTCONTEXT.getDesktop()
file_url = uno.systemPathToFileUrl("C:/path/to/file.odt")
doc = desktop.loadComponentFromURL(file_url, "_blank", 0, ())
oScriptProvider = doc.getScriptProvider()
oScript = oScriptProvider.getScript(
    "vnd.sun.star.script:Standard.Module1.mymacro?"
    "language=Basic&location=document")
oScript.invoke((), (), ())

改编自Execute LibreOffice Calc Basic macro from python

【讨论】:

  • 谢谢。像魅力一样工作。虽然不一定很明显,但现在肯定很有意义。对其他人可能有所帮助的一些澄清。如果 python 脚本是从嵌入的 python 脚本运行的(就像我的一样), loadComponentFromURL 将打开 odt 文件的另一个副本。这可能会导致文件打开的两个副本出现问题。通过删除响应的第 2 行和第 3 行并将第 1 行编辑为:doc=XSCRIPTCONTEXT.getDocument() 可以解决此问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多