Excel API cell.insert需要很长时间才能运行

时间:2017-11-16 04:35:41

标签: excel office-js

我正在尝试在工作表中使用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是否提供了以更少的时间实现相同目的的任何其他方式?

1 个答案:

答案 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所以无法测试它,但应该这样做。