如何从另一个文档运行脚本

Posted

技术标签:

【中文标题】如何从另一个文档运行脚本【英文标题】:How to run a script from another document 【发布时间】:2021-08-29 13:22:13 【问题描述】:

我有两个文档 LibreOffice calc test1.ods 和 test2.ods。 我想从 test1 的脚本在 test2 中运行一个脚本。

    当 test2 由 test1 的脚本打开时,我无法在 test2 上运行该脚本,即使是从 test2。我如何才能传递 test2 文档的安全性? 如何从 test1 上的脚本自动运行 test2 上的脚本?

REM  *****  BASIC  *****
'Script on Test1
Sub Main

Dim urlDest As String
Dim PropFich(1) As New com.sun.star.beans.PropertyValue
Dim oDocDest As Object

    PropFich(0).Name = "MacroExecutionMode" 
    PropFich(0).value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE
    urlDest = ConvertToUrl("/home/patrick/Bureau/Test/test2.ods")
    oDocDest = StarDesktop.loadComponentFromUrl(urlDest, "_blank", 0, PropFich())
    ' ...
    'run oDocDest.Standard.Module1.Main() ???
End Sub

【问题讨论】:

【参考方案1】:

获取另一个文档的脚本提供程序并使用它来调用宏。

oScriptProvider = oDocDest.getScriptProvider()
oScript = oScriptProvider.getScript(_
    "vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document")
result = oScript.invoke(Array(), Array(), Array())

为此,您需要通过转到工具>选项>安全来允许宏运行。

【讨论】:

谢谢,我今晚要测试这个,但是 Array() 有什么意义。有争论吗? : 调用(数组(),数组(),数组() 您的Main() 例程不需要任何参数,因此数组为空。 好的,如果我有任何参数,它们必须在数组中? 完美运行。使用 MacroExecMode.ALWAYS_EXECUTE,test2 脚本在不更改选项安全部分的情况下运行

以上是关于如何从另一个文档运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Postman 中的预请求脚本从另一个请求运行一个请求

我可以使用 `fetch` 从另一个运行 JS 脚本吗?

如何通过 laravel 应用程序使用数字海洋服务器从另一台服务器在远程服务器上运行脚本文件

使用 Yarn 从另一个脚本调用一个脚本

Python RPi - 从另一个脚本运行脚本时找不到文件

脚本在手动运行时完全运行,但在从另一个脚本运行时会丢失命令