Excel API cell.insert运行时间很长
我正试图在工作表中使用的Excel API cell.insert运行时间很长,excel,office-js,Excel,Office Js,我正试图在工作表中使用的范围内或之下插入一些行 虽然我这里的代码显示了一个硬编码数组,但数据实际上来自服务器应用程序。我在扫描服务器响应后确定插入的顺序。我的代码的工作原理如下: Excel.run(函数(ctx){ var rowIdsArray=[1,2,3,4,5,6,7,8,9];//可能来自服务器的数据 var sht=ctx.workbook.worksheets.getItem(“Sheet1”); 对于(变量i=50;i>3;i--){ //我可能希望在行之前插入这些行 //3到
范围内或之下插入一些行
虽然我这里的代码显示了一个硬编码数组,但数据实际上来自服务器应用程序。我在扫描服务器响应后确定插入的顺序。我的代码的工作原理如下:
Excel.run(函数(ctx){
var rowIdsArray=[1,2,3,4,5,6,7,8,9];//可能来自服务器的数据
var sht=ctx.workbook.worksheets.getItem(“Sheet1”);
对于(变量i=50;i>3;i--){
//我可能希望在行之前插入这些行
//3到50。因此9行插入48次
对于(var counter1=0;counter1”+e.Message);
});
我将rowIdsArray
作为要插入的id
行数组。循环迭代解释了我希望在哪个索引处(在我的项目中,这个数组有随机数)将这些行添加到工作表中
因此,我基本上是在工作表中插入行数(400-450行),但这需要花费太多的时间。我可以看到Excel非常缓慢地一行一行地插入行
office.js API是否提供了任何其他方法来以非常少的时间实现同样的目标 您可以一次设置所有值:
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.run(函数(ctx){
var sheetName=“Sheet1”;
var rangeAddress=“A3”;
//价值观是:
// [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 i=-1;
变量行=行;
ret=[];
当(++i时,您可以一次设置所有值:
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.run(函数(ctx){
var sheetName=“Sheet1”;
var rangeAddress=“A3”;
//价值观是:
// [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 i=-1;
变量行=行;
ret=[];
while(++i支持您的答案,但我不认为这与我想做的相关。您提供了可以为特定范围设置值的解决方案,但我想在给定范围内插入行。我在代码中没有看到任何插入选项。您能详细说明一下吗?@PavanDivekar我更新了答案,先插入范围,然后再设置值(由于没有excel且仅限于MS文档,因此不确定这是否可行):您是对的,但我正在尝试在现有范围内插入我已有的行,我想这是无法使用您提供的代码完成的。@PavanDivekar我不知道您的意思,您能否使用您尝试插入的数据的JSON示例更新您的问题(仅3行即可)数据中的每一行都有相同数量的列吗?答案中的代码可能需要是:range.insert(“Down”).values=values;
。这将插入50行,并将第三行向下移动50行(我认为)。前/后工作表的示例也可能有助于理解如何对其进行优化。谢谢您的回答,但我不认为这与我要做的事情有关。您提供了可以为特定范围设置值的解决方案,但我希望在给定范围内插入行。我在代码中没有看到任何插入选项。是否可以详细说明?@PavanDivekar I更新了答案,首先插入范围,然后设置值(不确定这是否可行,因为没有excel,并且仅限于MS文档):您是对的,但我正在尝试在现有范围内插入我已有的行,我想这是无法使用您提供的代码完成的。@PavanDivekar我不知道您的意思,您能否使用您尝试插入的数据的JSON示例更新您的问题(仅3行即可)?数据中的每一行都有相同数量的列吗?答案中的代码可能需要是:range.insert(“Down”).values=values;
。这将插入50行,并将第三行向下移动50行(我认为)。前/后工作表的示例也可能有助于理解如何对其进行优化。