ワークブックを考えると、ワークシートを使い、使用範囲を取得したいと考えています。私は次のコードを書いています:ブックの使用範囲をすべて取得する方法
function getUsedRanges() {
Excel.run(function (ctx) {
var worksheets = ctx.workbook.worksheets;
var sheetnames = [];
worksheets.load('items');
return ctx.sync().then(function() {
for (var i = 0; i < worksheets.items.length; i++) {
worksheets.items[i].load('name');
};
return ctx.sync().then(function() {
for (var i = 0; i < worksheets.items.length; i++) {
sheetnames.push(worksheets.items[i].name);
}
})
}).then(function() {
var usedRange = [];
for (var i = 0; i < worksheets.items.length; i++) {
var worksheet = ctx.workbook.worksheets.getItem(sheetnames[i]);
usedRange[i] = worksheet.getUsedRange();
usedRange[i].load('address');
};
return ctx.sync().then(function() {
for (var i = 0; i < worksheets.items.length; i++) {
console.log(usedRange[i].address);
}
});
})
})
}
しかし、コードは私に重いです。例えば、
1)私はsheetnames
を取得するためにname
をロードし、その後items
をロードしなければならなかった)getItem
2により各ワークシートへのアクセス権を持っているsheetnames
を記録しなければなりませんでした。
コードを軽くする方法やプロパティがあるかどうか知りませんか?このようなタスクのコードの構造は何ですか?
編集1:マイケルの答えの後、私はまだusedRanges
とsheet names
の両方を取得したバージョンを入れ、sheet names
はusedRanges
を得るために必須ではありませんのでご注意:
function getUsedRanges() {
Excel.run(function (ctx) {
var worksheets = ctx.workbook.worksheets;
var usedRange = [];
worksheets.load('name');
return ctx.sync()
.then(function() {
for (var i = 0; i < worksheets.items.length; i++) {
usedRange[i] = worksheets.items[i].getUsedRange();
usedRange[i].load('address');
};
})
.then(ctx.sync)
.then(function() {
for (var i = 0; i < worksheets.items.length; i++) {
console.log(worksheets.items[i].name);
console.log(usedRange[i].address);
}
})
})
}
[昨日の質問]のために...あなたにマイケルをありがとうございます(httpなることができますを意味します/ /stackoverflow.com/a/37871688/702977)、グローバル初期の「ワークブック」や「ワークシート」を保存する方法がないので、後でそれらのプロパティのいくつか(例えば、 'items'、' name')を読み込むことができます必要ならば?言い換えれば、最初にすべてのプロパティ(後で必要とする)をロードし、変数に保存する必要がありますか(このスレッドのような)? – SoftTimur
はい、それは正しいです –
一つ:私は実際には、 'worksheet.load(' items ') 'の代わりに上記の間違いがあったことを認識しました' worksheet.load( "name") ' –