2017-11-16 19 views
1

シートから使用済みrange以下の行を挿入しようとしています。Excel API cell.insert実行に非常に時間がかかります

私のコードはハードコードされた配列を示していますが、データは実際にはサーバーアプリケーションからのものです。私はサーバーの応答をスキャンした後に挿入の順序を決定します。

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); 
}); 

私は挿入したいidと列の配列としてrowIdsArrayを持っている:私のコードは多少以下のように動作します。どのようなインデックス(私のプロジェクトでは、この配列は乱数を持っています)を反復するループは、シートにこれらの行を追加したいと考えています。

私は基本的にシート(400-450行)に行数を挿入していますが、時間がかかりすぎます。私は行を挿入するExcelを見ることができます非常に 1つずつ、ゆっくりと。

office.js APIは、非常に短い時間で同じことを達成するための他の方法もありますか?

答えて

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がそれをテストすることはできません必要はありませんが、それはそれを行う必要があります。

+0

あなたの答えはありがたいですが、これは私がやりたいことに関連しているとは思われません。特定の範囲の値を設定することができますが、私は与えられた範囲に行を挿入したいと思います。あなたのコードに挿入オプションが表示されません。もっと詳しく教えていただけますか? –

+0

@PavanDivekar範囲を挿入するための答えを更新した後、値を設定します(これはExcelを持たないため、MSのドキュメントに限定されているため動作しないのか分かりません):https://dev.office.com/reference/addinins/excel/range#insertshift-string – HMR

+0

あなたは正しいですが、すでに持っている既存の範囲に行を挿入しようとしていますが、これはあなたが提供するコードを使って行えません。 –

関連する問題