LANG SELRCT

コードを書く場所についてはこちら

2018年2月26日月曜日

シートの特定の列で指定した日時よりも新しい日時の行を取得する


スプレッドシートの特定の列で基準日時よりも新しい日時の行を取得したい

  1. 基準日時を決める
  2. 対象の列の値(日時)を取得する
  3. 基準日時よりも大きい日時を抽出する

ということを実現するコードの例です



コード.gs
function get_updated_rows(){
  var latest = new Date("2018/02/26 18:49:50");
  var values = get_values();
  var rows = judge_array(values, latest);
  Logger.log(rows)
}

function get_values(){
  var sh = SpreadsheetApp.getActiveSheet();
  var last_row = sh.getLastRow();
  var range = sh.getRange("A1:A" + last_row)
  var values = range.getValues();
  return values;
}

function judge_array(values, latest) {
  var rows = [];
  for(var i = 0; i < values.length; i++){
    if(values[i][0] > latest){
      var value = format_date(values[i][0]);
      rows.push(i + 1);
    }
  }
  return rows;
}

function format_date(date){
  return  Utilities.formatDate(new Date(date), "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss")
}
意訳
この機能がやること
基準日時を決めて
get_values()からvaluesを取得して
judge_array(values, latest)に渡して結果を得て
ログに出す


この機能がやること
スプレッドシートを取得して
データが入っている最終行を取得して
範囲を指定して
値を取得して
返す


この機能がやること
rowsという空の配列を作って
受け取ったvaluesの数だけ以下を繰り返す
ひとつずつ値を取得してもしlatestよりも大きければ
format_date(date)に送ってフォーマットして
i に 1を足してrowsに追加する(i は 0始まりでシートの行は1始まりなので+1する)


出来上がったrowsを返す


この機能がやること
受け取ったdateを指定したtimezoneと形式にフォーマットして返す