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

浏览器中运行Excel.run:嵌套JS函数未执行最内层代码问题

模拟Excel.Run时异步回调未执行的问题

我正在尝试让Office Add-In能在浏览器的Excel环境外运行,为此会检查Office和Excel变量是否已定义,未定义时就创建模拟变量来保证代码运行(我清楚实际依赖这些函数的功能时代码会报错,目前仅需在Edge浏览器的Office环境外做测试)。这个问题本质和Excel无关,核心是我对async函数及函数对象的理解有欠缺。

我把代码精简成了最小可复现示例(MVCE),现在的问题是:预期执行的console.log("commandsfunc");完全没运行,代码既不报错也没进入这段逻辑。

代码示例

index.html

<html>
        <head>
           <title>My External JavaScript Code!!!</title>
           <script type="text/javascript" src="test.js">
           </script>
        </head>
        <body>
        </body>
</html>

test.js

var Excel = {}
Excel.run = async function (context) {
    console.log('Excel.Run')
    var context = {}
    return context
}

CommandsFunc(event)
async function CommandsFunc(event) {
    console.log('Excel')
    console.log(Excel)
    await Excel.run(async (context) => {
        //Start Func.
        console.log("commandsfunc");
        //End Func
    });
    console.log('Out')
}

问题原因及解决方法

问题出在模拟的Excel.run函数上:你调用Excel.run时传入了一个异步回调函数,但这个模拟函数根本没执行传入的回调。原版Excel.run的逻辑是接收一个回调,把context传给回调并执行它,你的模拟实现漏掉了这一步。

修改后的Excel.run应该像这样:

Excel.run = async function (callback) {
    console.log('Excel.Run')
    var context = {}
    // 执行传入的回调函数,并传入context
    await callback(context);
    return context
}

另外,调用CommandsFunc(event)时event变量未定义,会在控制台弹出警告,但这不是回调未执行的原因,若不需要可以直接改成CommandsFunc()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:38:25