Google Apps Script, search with url parameter.

Published: Sat 14 July 2018
By oec

In JS.

Google Apps Script(GAS)でスプレッドシートを検索する

Googleスプレッドシートの特定のカラムを、URLパラメータを引数に検索して マッチしたデータのみJSONで返す様なAPIのサンプル。

function getData(id, sheetName, v) {
  var val = v || " "
  var sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName);
  var rows = sheet.getDataRange().getValues();
  rows.shift()
  var keys = ["id", "title", "date"]
  var l = rows.map(function(row) {

    //必要なカラムの値だけオブジェクトに渡します。
    var item = [row[2].split('/').slice(-1)[0], row[3], row[9]] 

    // title要素を引数で検索し、matchした場合だけobjを返す
    if(item[1].match(val) ){
      var obj = {}
      item.map(function(x, i) {
        obj[keys[i]] = x;
      });
      return obj;
    }
  });
  l = l.filter(Boolean)
  return l
}

function doGet(e) {
  //URLパラメータを取得
  var val = e.parameter.v  
  var data = getData(スプレッドシートID, ワークシート名, val);
  return ContentService.createTextOutput(JSON.stringify(data, null, 2))
  .setMimeType(ContentService.MimeType.JSON);
}

次は、取得する行をレンジ指定するAPIを考えてみた。 pager的に取得するページとページのサイズを引数として渡すと以下のようになる。

function getData(id, sheetName, p, m) {
  var p = p || 1
  var retmax = m || 10

  // columnのstart,rangeはとりあえず固定とする
  var col_start = 3
  var col_range = 3

  // 引数のpageは1スタートとする
  // getRange()に渡すrow:starting row を計算。header行があるため+2。
  var start = (p - 1) * retmax + 2

  var sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName);
  // start row, 
  var rows = sheet.getRange(start, col_start, retmax, col_range).getValues();
  var keys = ["col1", "col2", "col3"]

  //行の範囲を選択
  return rows.map(function(row) {
    var obj = {}
    row.map(function(item, index) {
      obj[keys[index]] = item;
    });
    return obj;
  });
}

function doGet(e) {
  var page = e.parameter.page
  var max = e.parameter.max
  var data = getData('スプレッドシートID', 'ワークシート名', page, max);
  return ContentService.createTextOutput(JSON.stringify(data, null, 2))
  .setMimeType(ContentService.MimeType.JSON);
}

links

social