我已经存储了一个范围地址数组,并且我也知道当前选中的单元格。我需要遍历存储地址定义的所有范围,并检查选中的单元格是否在其中一个单元格中(如果有交叉点)。在同步世界中,这很容易,但我无法弄清楚在office.js的异步世界中如何做到这一点。如何在Excel中使用Excel中的异步进行迭代搜索
我发现这个职位Best way to write loops with promises (ctx.sync) in JavaScript API for Office,其中Michal显示了一个很好的模式来链接异步调用,但是,我有一些问题。
正好有代码在这里我要复制粘贴:
function loadAll() {
var ranges = ["A:A", "B:B", "C:C", "D:D", "E:E"];
var sheet = "Sheet1";
// Create a starter promise object
var promise = new OfficeExtension.Promise(function(resolve, reject) { resolve (null); });
for (var i = 0; i < ranges.length; i++) {
// Create a closure over i, since it's used inside a function that won't be immediately executed.
(function(i) {
// Chain the promise by appending to it:
promise = promise.then(function() {
return loadRange(ranges[i], sheet);
})
})(i);
}}
function loadRange (range, sheet) {
return Excel.run(function (ctx) {
var r = ctx.workbook.worksheets.getItem(sheet).getRange(range);
r.load('address');
return ctx.sync().then(function() {
console.log(r.address);
});
});
}
问题:
1)为什么有一个自动执行的内部函数在换我循环?应该是不够的:
for (var i = 0; i < ranges.length; i++) {
// Chain the promise by appending to it:
promise = promise.then(function() {
return loadRange(ranges[i], sheet);
})
}}
2)我需要修改它,以停止链,如果找到交集。我怎样才能做到这一点? 3)你会推荐我一些其他方法如何迭代excel对象(例如范围)来搜索某些东西(列中的第一个空单元格等)吗?
感谢
菲利普