Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel API cell.insert运行时间很长_Excel_Office Js - Fatal编程技术网

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行(我认为)。前/后工作表的示例也可能有助于理解如何对其进行优化。