You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LibreOffice Calc中跨文档调用运行另一文档的脚本

问题1:解除test2文档宏安全限制
  • 先配置全局受信任位置:打开LibreOffice,依次进入「工具」→「选项」→「安全」→「宏安全性」,将test1、test2所在的文件夹添加到「受信任位置」列表,该配置优先级高于单文档加载设置,是避免宏被系统拦截的核心前提。如果不想添加受信任位置,也可以将宏安全等级调整为「中」,每次打开文档时手动确认允许运行宏即可。
  • 你现有代码里的MacroExecutionMode属性配置无需修改,和上面的全局配置配合后,打开的test2就可以手动正常运行内置宏。
问题2:从test1脚本触发test2的指定宏

你可以通过加载完成的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
Dim oScriptProvider As Object
Dim oScript As Object
Dim sMacroPath As String

    ' 配置文档加载属性,允许宏运行
    PropFich(0).Name = "MacroExecutionMode" 
    PropFich(0).value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE
    ' 不需要隐藏test2窗口的话可以删掉下面两行配置
    PropFich(1).Name = "Hidden"
    PropFich(1).value = False

    urlDest = ConvertToUrl("/home/patrick/Bureau/Test/test2.ods")
    oDocDest = StarDesktop.loadComponentFromUrl(urlDest, "_blank", 0, PropFich())
    
    ' 宏路径规则:vnd.sun.star.script:[库名].[模块名].[方法名]?language=Basic&location=document
    ' location=document表示宏保存在文档内部,不是LibreOffice全局宏
    sMacroPath = "vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document"
    oScriptProvider = oDocDest.getScriptProvider()
    oScript = oScriptProvider.getScript(sMacroPath)
    ' 如果目标宏需要传参,将参数按顺序放到第一个Array()中即可
    oScript.invoke(Array(), Array(), Array())
    
End Sub

如果调用时报找不到脚本的错误,打开test2按Alt+F11进入宏编辑器,确认目标宏的库名、模块名、方法名和路径里写的完全一致即可。

内容的提问来源于stack exchange,提问作者patol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:39:03