我正在尝试在工作表中使用range
内部或下方插入一些行。
虽然我的代码显示的是硬编码数组,但数据实际上来自服务器应用程序。我在扫描服务器响应后确定插入的顺序。我的代码有点像下面这样:
Excel.run(function (ctx) {
var rowIdsArray = [1, 2, 3, 4, 5, 6, 7, 8, 9]; //data that might have come from server
var sht = ctx.workbook.worksheets.getItem("Sheet1");
for (var i = 50; i > 3; i--) {
//I might want these rows to be inserted before rows
//3 to 50. So 9 rows inserted 48 times
for (var counter1 = 0; counter1 < rowIdsArray.length; counter1++) {
var cell = sht.getUsedRange().getRow(parseInt(i)).getOffsetRange(1, 0);
cell.insert();
}
}
return ctx.sync().then(function () {
console.log("rows inserted");
});
}).catch(function (e) {
console.log("Error Message is -> " + e.message);
});
我有rowIdsArray
作为行数组,我要插入id
。循环迭代解释了哪个索引(在我的项目中这个数组有随机数)我想将这些行添加到工作表中。
所以我基本上将多少行插入到工作表中(400-450行),但它占用了太多时间。我可以看到Excel逐个慢慢插入行非常。
office.js API是否提供了以更少的时间实现相同目的的任何其他方式?
答案 0 :(得分:0)
您可以一次设置所有值:
Excel.run(function (ctx) {
var sheetName = "Sheet1";
var rangeAddress = "A3";
//values is:
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
// [2, 3, 4, 5, 6, 7, 8, 9, 10]
//...
// [50, 51, 52, 53, 54, 55, 56, 57, 58]
var values = (function(values){
var i = -1;
var rows = rows;
ret = [];
while(++i<rows){
ret.push(
values.map(
function(value){
return value+i;
}
)
);
}
})([1,2,3,4,5,6,7,8,9]);
var range = ctx.workbook
.worksheets.getItem(sheetName)
.getRange(rangeAddress)
.getRowsBelow(rows)
.getColumnsAfter(9);
range.insert("Down");
range.values = values;
range.load('text');
return ctx.sync().then(function() {
console.log(range.text);
});
}).catch(function(error) {
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
我没有excel所以无法测试它,但应该这样做。