ray88’s diary

お仕事で困ったとき用の自分用の覚書

GAS スプレッドシートの表を読み取って処理する②

3. 「オブジェクト配列化」して扱いやすくするパターン
ヘッダー行(1行目)をキーにして、「テーブル」をレコード(オブジェクト)配列に変換しておくと
CSV部品や Drive ファイル一覧部品とも同じノリで扱えます。

/**
 * アクティブシートの内容を
 * ヘッダー行(1行目)をキーにしたオブジェクト配列に変換するテンプレ
 */
function readSheetAsRecords() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  const lastCol = sheet.getLastColumn();

  if (lastRow < 2) {
    return []; // データ行なし
  }

  const header = sheet.getRange(1, 1, 1, lastCol).getValues()[0];         // 1次元配列
  const data   = sheet.getRange(2, 1, lastRow - 1, lastCol).getValues();  // 2次元配列

  const records = data.map(row => {
    const obj = {};
    header.forEach((h, i) => {
      obj[h] = row[i];   // 見出しをキーにする
    });
    return obj;
  });

  return records;
}

【使用例】

function sampleUseRecords() {
  const records = readSheetAsRecords();

  // 例:ステータス列が「完了」の行だけログ
  const filtered = records.filter(r => r['ステータス'] === '完了');

  filtered.forEach(r => {
    Logger.log(`${r['ID']} : ${r['顧客名']} / ${r['金額']}`);
  });
}

👉 こうしておくと、
CSVから読んだデータ」「シートから読んだデータ」「Driveのファイル情報」
ぜんぶ「レコード配列」として同じパターンで扱えるので、汎用部品を作りやすくなります。