googleカレンダーに配列を使ってスケジュールを入れる関数

/**
   * 配列をもとにカレンダーに予定を入れる
   * @param  holidays{object}
   * @return -
   * タイトル、開始時間、終了時間 
   */
function calendar(holidays) {
  for (const holiday of holidays) {
    const [title, startTime, endTime] = holiday;
    CalendarApp.getDefaultCalendar().createEvent(title, startTime, endTime);
  }
}

日本の祝日+特定の日で配列を作る関数

/**
   * 祝日+会社の休日から配列Holidaysを作る
   * @param  -
   * @return holidays
   * 年始に稼働させる(getFullYearを使用しているため)
   */
function isHoliday() {
  //Googleカレンダーの日本の祝日を取り込む
  const cal = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
  const fullYear = new Date().getFullYear();
  const [startDate, endDate] = [new Date(fullYear, 0, 1), new Date(fullYear, 11, 31)];
  const events = cal.getEvents(startDate, endDate);
  //格納用の空配列を用意
  const holidays = [];
  for (const value of events) {
    holidays
      .push(
        [value.getTitle(), new Date(value.getStartTime().setHours(8)), new Date(value.getEndTime().setHours(-4))]);
  }
  // 会社の休日を設定
  const companyEvents = [
    new Date(fullYear, 11, 29),
    new Date(fullYear, 11, 30),
    new Date(fullYear, 11, 31),
    new Date(fullYear, 0, 2),
    new Date(fullYear, 0, 3)
  ];
  /* 会社の休みを配列に入れる */
  for (const value of companyEvents) {
    holidays.push(['年末年始休暇', new Date(value.setHours(8)), new Date(value.setHours(20))]);
  }
  return holidays;
}

依頼書の依頼番号を入れたらPDF出力するスクリプト

◼️前提
・別シートにデータレコードがあります
・帳票形式の「依頼書」シートに依頼番号をいれるとデータが反映されます

◼️動作
・依頼番号を書き換えるとウィンドウが出ます
・PDFしていいか聞かれるのでOK押します
・指定フォルダにA4縦でPDFされます
・ファイル名は帳票からセル指定で情報取得して作成されます

//参考1:https://auto-worker.com/blog/?p=4836
const test = 0 //本番:0、テスト:1
//移動させたい先のフォルダID
const folderId = `××××××××××××××××××××××××××××`;
//-----------------------------------------------------------------------------------
function onEdit(e) {
  //シート名が任意のシートなら処理に入る
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const targetSheet = spreadsheet.getSheetByName('依頼書');
  const targetSheetName = targetSheet.getSheetName();
  const activeSheet = spreadsheet.getActiveSheet();
  const activeSheetName = activeSheet.getSheetName()
  //開いているシートがターゲットシートかどうかを判定し、違う場合は、直ちに処理を終了する。
  if (targetSheetName !== activeSheetName) { return };
  console.log(`指定したシート: ${targetSheetName}`);
  console.log(`アクティブなシート: ${activeSheetName}`);
  //アクティブセルを取得
  const activeCell = targetSheet.getActiveCell();
  //開いているシートがターゲットシートかどうかを判定し、違う場合は、直ちに処理を終了する。
  if (activeCell.getA1Notation() !== `L3`) {
    console.log(`セル位置相違`); return
  };
  console.log(`セル位置OK`);
 let question = Browser.msgBox(`この内容で発行しますか?`,Browser.Buttons.OK_CANCEL);
  if(question ===`ok`){
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const title = ss.getRange(`B6`).getValue();
  const number = ss.getRange(`L3`).getValue();
  // PDF出力対象のシートを指定
  const ssId = ss.getId();
  const sheetId = ss.getSheetByName('依頼書').getSheetId();
  // スプレッドシートをPDF出力するためのURL
  const url = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?'
  // PDF出力のオプションを設定
  const options = 'exportFormat=pdf&format=pdf'
    + '&gid=' + sheetId  //PDFにするシートの「シートID」
    + '&portrait=true'   //true(縦) or false(横)
    + '&size=A4'         //印刷サイズ
    + '&fitw=true'       //true(幅を用紙に合わせる) or false(原寸大)
    + '&gridlines=false' //グリッドラインの表示有無
  //  + '&range=A1%3J51'   //★POINT★セル範囲を指定
  // %3A はコロン(:)を表す
  const requestUrl = url + options;
  //API使用のためのOAuth認証
  const token = ScriptApp.getOAuthToken();
  const params = {
    'headers': { 'Authorization': 'Bearer ' + token },
    'muteHttpExceptions': true
  };
  const response = UrlFetchApp.fetch(requestUrl, params);
  //Blobオブジェクトを作成
  const blob = response.getBlob();
  blob.setName(title + ` 番号:` + number + '.pdf'); //PDFファイル名を設定
  //指定のフォルダにPDFファイルを作成
  const folder = DriveApp.getFolderById(folderId);
  folder.createFile(blob);
}
}

Slackに通知する関数

// slack通知する関数
function sendToSlack_(slackTOKEN, slackbody) {
  //Slack通知
  let options =
  {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(
      { "text": slackbody }
    ),
    'parse': 'none',
    'as_user': true
  };
  //投稿先
  UrlFetchApp.fetch(slackTOKEN, options);
}

Arrayから今日のレコードだけ返す関数

/*
 * dateLabel列が今日のものだけを抽出する関数(yyyyMMddに置き換え->filter)
 * @param  dateLabel   日付フォーマットを変換したい項目名(1行目であること)
 * @param  values     変更したい本体データ(2行目以降であること)
 * @return newValues  今日のデータのみを配列にして返す
*/
function filterToJustToday_(dateLabel, values) {
  const [header, ...data] = values;
  const typeDateColumn = header.indexOf(dateLabel);
  console.log(`関数:filterToJustToday_実施 日付フォーマットを変更したい項目index番号:` + typeDateColumn);
  for (const value of data) {
    let dataline = value;
    dataline[typeDateColumn] = Utilities.formatDate(new Date(value[typeDateColumn]), `JST`, `yyyyMMdd`);
  }
  const today = Utilities.formatDate(new Date(), `JST`, `yyyyMMdd`);
  const newValues = [header].concat(data.filter(value => value[typeDateColumn] == today));
  return newValues;
}