如何在Excel中使用异步迭代搜索

时间:2017-08-11 13:41:03

标签: office-js

在我的Excel加载项中我存储了一系列范围地址,我也知道当前选择的单元格。我需要遍历由存储地址定义的所有范围,并检查所选单元格是否在其中一个中(如果存在交集)。在同步世界中它很容易,但我无法弄清楚如何在office.js的异步世界中做到这一点。

我发现了这篇帖子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-i循环中存在自执行的内部函数?仅仅是不够:

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对象(例如,范围)来搜索某些内容(列中的第一个空单元格等等)?

由于

菲利普

0 个答案:

没有答案