Excel.run
はPromiseを返しますので、.then
とチェーンして注文を保証することができます。例えば、
Excel.run(function(ctx) { ... return ctx.sync(); ... })
.then(function() {
return Excel.run(function(ctx) { ... return ctx.sync(); ... })
})
.then(function() {
return Excel.run(function(ctx) { ... return ctx.sync(); ... })
});
言われていることです...これはかなり非効率的です。より良いアプローチは、あなたが唯一のネットワーク(エクセルオンラインで特に重要...それでも、デスクトップ上の目立つ)の往復を作成し、1回分に必要なすべてのオブジェクトをロードするために、次のようになります。
function loadAll() {
Excel.run(function(ctx) {
var ranges = ["A:A", "B:B", "C:C", "D:D", "E:E"];
var sheet = "Sheet1";
var loadedRanges = [];
for (var i = 0; i < ranges.length; i++) {
var r = ctx.workbook.worksheets.getItem(sheet).getRange(ranges[i]);
r.load('address');
loadedRange.push(r);
}
return ctx.sync()
.then(function() {
for (var i = 0; i < loadedRanges.length; i++) {
console.log(loadedRanges[i].address);
}
});
});
}
UPDATE
コメントのとおり、あなたが
Excel.run
の連鎖を経由して、配列決定する必要がないので、お互いに依存し、それぞれが往復を必要とすること、および個別のタスクを実行する必要が終わるん場合は、次のよう は
、私は何かをお勧めします:
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);
});
});
}
〜Office拡張性チームの開発者であるMichael Zlatkovsky
実行順序はなぜ気になるのですか? 'Excel.run'は何を返しますか? – Bergi
Excel.run()は、Excelオブジェクトモデルに対してアクションを実行するバッチスクリプトを実行します。バッチコマンドには、ローカルJavaScriptプロキシオブジェクトとローカルオブジェクトとExcelオブジェクト間の状態を同期させ、解決を約束するsync()メソッドの定義が含まれています。 ([概要](http://dev.office.com/docs/add-ins/excel/excel-add-ins-javascript-programming-overview) – SoftTimur
私は実行命令を気にします...私は行くつもりです'loadRange'や' console.log(r.address) 'のような複雑なものには、それらは順序に依存しています... – SoftTimur