Excel JavaScript 插件 - 访问属性被拒绝

问题描述 投票:0回答:2

我目前正在开发一个 Excel JavaScript 插件,该插件应该处理大量数据以从一列中获取值,将其分成某些字符串并将这些字符串粘贴到单独的列中。

我的问题是访问单元格的值。 我正在使用标准过程(见下文),该过程也在 Visual Studio(社区 2017)给出的示例代码中使用。 当我将给定单元格的所有可能属性打印到控制台时,有些单元格旁边有一条注释,上面写着:“”,这是德语中的“” 因此,我无法访问这些属性,也无法获得“value”属性的任何结果。

奇怪的是,相同的代码已经在另一个项目中运行,因此也可以在另一个项目中运行。

代码基本上是:

var sheet = context.workbook.worksheets.getActiveSheet();
var range = sheet.getRange("C1:C1").load("values,text");
var value = range.values[0][0];

物业备注:

我收到以下错误代码:

错误:PropertyNotLoaded:属性“值”不可用。在读取属性值之前,请在包含对象上调用 load 方法,并在关联的请求上下文上调用“context.sync()”。

我在互联网上搜索了很多并试图找到答案,但我找不到任何东西。我希望你能帮助我。

javascript excel add-in excel-addins
2个回答
0
投票

您的错误消息表明该属性尚未加载到脚本的上下文中。根据您提供的内容,加载属性后您可能会错过

context.sync()
调用。一旦指定了加载属性,您必须将状态与文档同步。

  1. 您应该加载对象的属性(您已经完成了)
  2. 通过调用
    context.sync();
  3. 来同步状态
  4. context.sync()
    调用解决后,您就可以安全地访问加载的属性

对于异步函数,您应该使用

await
,否则使用
.then()
来处理承诺。

await context.sync();
return context.sync()
    .then(function () {
        var value = range.values[0][0];
        console.log(value);
    })
    .catch(function (error) {
        console.log("Error: " + error);
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
    });

0
投票

您遇到的错误 PropertyNotLoaded 表示在尝试访问指定的一个或多个属性之前尚未加载它们。在 Excel JavaScript API 中,您需要显式加载要访问的属性,然后同步上下文以执行请求。

以下是修改代码来解决此问题的方法:

// Assume that you have the Excel.run context already set up.

var sheet = context.workbook.worksheets.getActiveWorksheet();
var range = sheet.getRange("C1:C1").load("values"); // Load only the 'values' property

return context.sync()
    .then(function () {
        var value = range.values[0][0];
        console.log(value);
    })
    .catch(function (error) {
        console.error(error);
    });

注意要点:

  • 加载所需的属性: 在 load 方法中,指定要访问的属性。在本例中,我们仅加载“values”属性。

  • 使用 context.sync(): 加载属性后,调用 context.sync() 将工作簿的状态与脚本同步。

  • 访问该属性: 同步完成后,您可以访问加载的属性。在此示例中,我们在同步后访问 range.values。

确保整个代码位于 Excel.run 块内,并且上下文已正确设置。如果您仍然遇到问题,请考虑检查您正在使用的 Office 加载项 JavaScript API 的版本,并将其与其运行的项目中使用的版本进行比较。有时,API 版本的更新或更改可能会影响行为。

© www.soinside.com 2019 - 2024. All rights reserved.