LANG SELRCT

コードを書く場所

2019年2月13日水曜日

シートの列ごとに配列を作りたい


getValues()だと
[[一行目の値の配列], [二行目の値の配列],...]
というような2次元配列で行単位の配列が取得できる

これを
[[一列目の値の配列], [二列目の値の配列],...]
というように列単位の配列で取得したい

今回使うシート


コピペ用のデータ

hirakana
あいうえおアイウエオ
かきくけこカキクケコ
さしすせそサシスセソ
たちつてと


一行目をkeyにして二行目以降を配列にして
このような形のデータにしたい
[
  {hira=[あいうえお, かきくけこ, さしすせそ, たちつてと]},
  {kana=[アイウエオ, カキクケコ, サシスセソ]}
]



コード.gs
function getData_gs() {
  var ss_url = 'スプレッドシートURL';
  var ss = SpreadsheetApp.openByUrl(ss_url);
  var sheet = ss.getSheets()[0];
  var headers = getRow1Values(sheet);  
  var lastRow = sheet.getLastRow();
  var lastCol = sheet.getLastColumn();
  var data = [];
  for(var i = 0; i < lastCol; i++) {
    var col = i + 1;
    var range = sheet.getRange(2, col, lastRow, 1);
    var values = range.getValues();
    var array = from2Dto1D(values);
    var obj = {};
    obj[headers[i]] = array;
    data.push(obj);
  }
  Logger.log(data);
}

function getRow1Values(sheet) {
  var lastCol = sheet.getLastColumn();
  var range = sheet.getRange(1, 1, 1, lastCol);
  var row1Values = range.getValues()[0];
  return row1Values;
}

function from2Dto1D(array){
  for(var i = 1; i < array.length; i++){
    if(array[i][0].length > 0) {//array[i].lengthだと空白も1になるので[0]にしてみる
      Array.prototype.push.apply(array[0], array[i]);
    }
  }
  return array[0];
}


実行結果