我目前正在开发一个 Excel JavaScript 插件,该插件应该处理大量数据以从一列中获取值,将其分成某些字符串并将这些字符串粘贴到单独的列中。
我的问题是访问单元格的值。
我正在使用标准过程(见下文),该过程也在 Visual Studio(社区 2017)给出的示例代码中使用。
当我将给定单元格的所有可能属性打印到控制台时,有些单元格旁边有一条注释,上面写着:“
奇怪的是,相同的代码已经在另一个项目中运行,因此也可以在另一个项目中运行。
代码基本上是:
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()”。
我在互联网上搜索了很多并试图找到答案,但我找不到任何东西。我希望你能帮助我。
您的错误消息表明该属性尚未加载到脚本的上下文中。根据您提供的内容,加载属性后您可能会错过
context.sync()
调用。一旦指定了加载属性,您必须将状态与文档同步。
context.sync();
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));
}
});
您遇到的错误 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 版本的更新或更改可能会影响行为。