3

アプリ スクリプトを使用して Google スプレッドシートで 2D 配列の質問があります。

get と set 関数をできるだけ少なく使用することになっています。そのため、最初にシート全体を 2D 配列に読み込んでから、その一部を参照しようとしています。2D配列が入ったらそれを参照する方法がわからないことを除いて.

これが私がこれまでに行ったことです。

var ss = SpreadsheetApp.getActiveSpreadsheet()
var COMPANYIOSheet=ss.getSheetByName("Sheet1"); 
var IO_array= COMPANYIOSheet.getRange("A1:c10").getValues();

私は次のようなことをしたい:

var subarray=IO_array[3:5][1];

しかし、それはうまくいきません。私は1つのポイントだけを参照しているようです:

var subarray=IO_array[3][1];

サブ 2D 配列にスライスするにはどうすればよいですか?

ありがとう。

4

2 に答える 2

5

サブ 2D 配列にスライスするにはどうすればよいですか?

を使用してslice()。;-)

var subarray=IO_array.slice(2, 5);

その後、参照できますsubarray[i][1]。「2 番目の列」のみを含む新しい配列を作成する必要がある場合は、いくつかの反復を使用する必要があります。


編集:Sergeの追加に追加し、コメントに返信して、配列から2Dサブ配列を返す一般的な方法を次に示します。

function slice2d(array, rowIndex, colIndex, numRows, numCols) {
  var result = [];
  for (var i = rowIndex; i < (rowIndex + numRows); i++) {
    result.push(array[i].slice(colIndex, colIndex + numCols));
  }
  return result;
}
于 2012-11-03T20:40:57.753 に答える
4

Adam の回答を補足するものとして、あなたの例IO_array[0]では行 1、IO_array[1]行 2 などです。それぞれが 1 次元配列です。したがって、「行」は管理が非常に簡単です。

列に関しては、Adam が反復する必要があると示唆したように、考えられる例を次に示します。

var col = new Array()
for(i=0;i<IO_array.length;++i){
  col.push(IO_array[i][0] ;// taking index 0 means I'll get column A of each row and put it in the new array
}

両方の答えがそれを十分に明確にすることを願っています;)

于 2012-11-03T23:19:32.817 に答える