【发布时间】:2019-01-27 12:26:16
【问题描述】:
我很难理解何时使用context.sync()。
这是一个基本的例子,但它恢复了我的理解:
Excel.run(function (context){
const wb = context.workbook;
const ws = wb.worksheets.getActiveWorksheet();
// should never happened, but is it correct to check like this ?
if (wb === null) {
// IS IT CORRECT TO DO THIS ?
// I just want to exit the function
// return; would be enough ? What's going on in the callstack?
return context.sync();
}
ws.load("name");
return context.sync().then(function() {
var name = wb.name;
// do stuff
var range = ws.getRangeByIndexes(1,1,10,10);
return context.sync().then(function() {
ws.names.add("NEWRANGE", range);
// mandatory return context.sync() to refresh Excel object ?
// doesn't work otherwise for me
return context.sync();
});
}
}).catch(function(error) {
// do stuff
}
如果有人能解释一下,那就太受欢迎了:)
干杯。
【问题讨论】:
-
我推荐这本电子书:leanpub.com/buildingofficeaddins,其中开发 JS API 的 MS 团队成员 Michael Zlatkovsky 解释了这一点。 FWIW 最后一个 context.sync 调用是绝对不是必要的。第二个是。首先:对于您向我们展示的内容不是必需的,但这取决于
if中发生的事情。 -
据我了解,我需要使用 context.sync() 是我需要与 Excel 交互,例如 ws.names.add("new_range", range)。我将修改示例以使其更清晰。
-
示例修改为添加新的范围名称。
-
当您需要来自 Excel 的信息以便在代码中使用它时,您需要使用 context.sync。在您的示例中,您在 Excel 中“查询”某些内容的唯一时间是
name属性,因此您加载该属性然后需要同步。真的,如果你读过这本书但仍然不确定,最好的方法就是尝试一下。 -
@Val 请使用 Script Lab 工具 (appsource.microsoft.com/en-us/product/office/…) 确保您至少获得了形式上正确的代码。您至少有一个缺少右括号。您加载了工作表的名称,但随后您尝试读取 工作簿 的名称。如果 wb 为 null,则第 3 行将引发错误,因此永远不会达到您的 if 条件。
标签: javascript excel office-js office-addins office365-apps