2017-04-26 6 views
0

Excelアドインを使用してテーブル内の一部の行を削除しようとしています。私が使用していたコードは以下の通りです:Excelアドイン行インデックスと値が未定義として返される

  var table = ctx.workbook.tables.getItem('TableName'); 

      if (Office.context.requirements.isSetSupported('ExcelApi', 1.2) === true) { 
       table.clearFilters(); 
      } 

      var tableRows = table.rows.load('items'); 

      ctx.sync().then(function() { 
       for (var i = (tableRows.count - 1); i >= 0; i -= 1) { 
        var row = tableRows.getItemAt(tableRows.items[i].index); 
        row.delete(); 
       } 
      }); 

これは、Internet Explorer 11を含むExcelのオンラインで正常に動作します。また、それは、バージョン1601(6741.2088の構築)以降で動作します。ただし、バージョン1509(Build 4266.1001)では動作しません。このバージョンでは、行項目の値とインデックスは未定義です。この問題を解決するにはどうすればよいですか?

答えて

1

ビルド番号の違いはわかりませんが、私はTableRow APIが脆弱なAPIだと言います(それを修正する方法も検討しています)。基本的に、getItemAtを実行すると、時点のインデックスに基づく参照が作成され、新しい行が追加または削除されたときにこのインデックスは調整されません。

つまり、削除/挿入のために、テーブル行コレクションを無効にする必要があるか、代わりにRangeオブジェクトを使用するように扱います。ここでも、このステートメントはTableRow/TableRowCollectionオブジェクトにのみ適用され、ワー​​クシートコレクションなどの他のコレクションは正しく調整されます。

関連する問題