You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在JavaScript中使用Excel的RTD函数?调用遇undefined问题求助

解决Office JS调用RTD函数时的undefined及类型错误问题

我之前也碰到过和你一样的困惑:明明Office JS文档说支持RTD函数,但直接访问ctx.workbook.functions.rtd却返回undefined,调用时还触发类型错误。问题出在RTD函数并没有被Office JS作为预定义属性暴露在functions对象下,但我们可以通过另一种方式来调用它。

为什么会出现undefined?

Office JS的ctx.workbook.functions对象只封装了一部分常用的Excel内置函数,像RTD这种特殊的实时数据函数,并没有被直接挂载为functions的属性,所以你打印它自然会得到undefined,直接调用就会抛出类型错误。

正确的调用方法

我们需要使用ctx.workbook.functions.invokeFunction方法,这个方法可以调用任何Excel支持的函数,包括那些没有在functions对象中直接暴露的函数。

把你的代码改成下面这样就可以正常运行了:

Excel.run((ctx) => {
    // 用invokeFunction调用RTD函数,第一个参数是函数名
    const userLogin = ctx.workbook.functions.invokeFunction(
        "RTD", 
        'ExcelRtd.RQData', 
        null, 
        'login', 
        'test', 
        'test'
    );
    userLogin.load('value');
    
    return ctx.sync().then(() => {
        console.log(userLogin.value);
    });
}).catch((error) => {
    console.log('Error: ' + error);
    // 可以额外打印调试信息,方便排查问题
    if (error instanceof OfficeExtension.Error) {
        console.log('Debug info: ' + JSON.stringify(error.debugInfo));
    }
});

几个关键注意点

  • 确保你的RTD服务器ExcelRtd.RQData已经在系统中正确注册,并且Excel可以正常访问它,否则会返回#NAME?或者其他相关错误。
  • 调用invokeFunction时,第一个参数是Excel函数的名称(这里是"RTD",大小写不敏感,但推荐用大写和Excel函数名保持一致)。
  • RTD是实时数据函数,如果需要监听数据的实时更新,你可以通过添加工作表变化事件来捕获数据更新,而不是只在sync后获取一次值。

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

火山引擎 最新活动