매일 업데이트되는 Google 스프레드시트 값을 정기적으로 다른 시트에 복사하는 방법

여명 3개월 만에 작성한 프로그램이 다른 프로그램으로 바뀌는 것이 결정되어 자산이 소실되므로 메모.

배경



직원의 이동 관리를 스프레드 시트로 관리하고 있으며,
웹 사이트상에 종업원의 출근 유무를 출력하게 되었다.

종업원 수가 많아 2 개월 앞까지 시프트가 짜여져 있습니다.
사이트에 출력하는 것은 최근 5일만.

전회 이하의 기사로 이끼한 적도 있다.
GoogleAppsScript (GAS)에서 스프레드 시트 값을 얻었을 때 빠졌습니다.
필요한 데이터를 매일 별도 시트로 추출하여 추출 결과를 jsonp 형식으로 전달하는 설계로 하였다.
전달은 전회 기사에 있는 처리를 유용. Web 사이트에 출력하는 처리는 JavaScript로 고리고리 썼다.
본 기사는 데이터를 매일 다른 시트에 추출하는 처리만을 기재.

처리 이미지



매일 특정 조건에서 시트에서 데이터를 추출하고 다른 시트로 복사합니다.


필요한 최소 기능



· 같은 이름의 시트가 존재하지 않으면 작성.
 →누군가의 손에 의해 복사처 시트가 삭제되어도 문제 없게 한다.

・현재일로부터 5일 후까지 추출을 대상으로 한다.

추출 처리


function weekCp() {
  //コピー先シート存在確認
  var sheet = set_sheet("直近5日");
  //コピー先シートクリア
  sheet.clearContents();
  //コピー元シートのデータを二次元配列で一括取得
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var original = spreadsheet.getSheetByName('シート1');
  var var1 = original.getDataRange().getValues();

  //現在日付を取得
  var date = new Date();
  var date_D = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0);

  //5日後の日付を取得
  var date_range = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0);
  date_range.setDate(date_range.getDate() + 4);

  //フィルタ後の配列を初期化 ヘッダー情報は固定なため、ベタ
  var data = [
    ["日付", "時間", "場所", "状況", "担当者"]
  ];

  for(var i=1; i < var1.length; i++){
    //当日以前のデータは対象外なため最初に落とす
    if(var1[i][0] >= date_D) {
      //それが5日の範囲内か
      if(var1[i][0] <= date_range) {
        data.push(var1[i]);
      }
    }
  }

  //データの書き込み
  //横(行)
  var lastColumn = data[1].length
  //縦(列)
  var lastRow = data.length
  //開始行 開始列 終了行 終了列
  sheet.getRange(1, 1, lastRow, lastColumn).setValues(data)
}


//同じ名前のシートがなければ作成
function set_sheet(name) {
  var sheet = SpreadsheetApp.getActive().getSheetByName(name)
  if(sheet)
    return sheet

  sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
  sheet.setName(name);
  return sheet;
}

트리거



매일 0시에 기동하도록 한다.

★[편집]→→[현재 프로젝트 트리거]를 선택


★ 트리거 추가

이상으로 매일 0시 이후에 마음대로 기동해 준다.

결론



여명 3개월은 슬프네요.

좋은 웹페이지 즐겨찾기