見出し画像

「スプレッドシートの入力が完了したらチャットワークに自動で通知する方法」の写経

今日やった記事


全て埋まったらチャットを送信!
そんなプログラムです

変更ポイント

配列でやってみよう!

「 mySheet.getRange(i,j).getValue()=="" 」で値を取得しています。
ここも、頑張って配列でやってみました。
考え方としては、配列の要素に値無しが含まれているかどうかを判定すれば良いはずです。

新たに学んだこと

配列には必須includesメソッド。

配列の要素に特定の要素が含まれていないかを検索できます。
一次配列にしか使えないので注意が必要です。

Arrayオブジェクト.includes(要素) \\要素がある場合はturu


配列の見出しを削除する

shiftメソッドを使うことで、配列の最初の要素を削除することができます。
これは、初級でやったのにメソット名を忘れていました。

Array.shift()


気付き

  • 配列で空白要素を検索する場合、DataRangeを使用するとA1やA2などの意図しない空白も検索してしまう。
    そのため、配列にする範囲をうまく設定する必要がある。

  • 配列にすると、インデックスが0から割り振られる。
    そのため、セル数などからforの回す回数を設定するのは難しい。
    代わりに、「lengthプロパティ-1」を使用することで、簡単にインデックス回forを回すことが可能になる。

作成したプログラム

function sentText() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const maxRow = sheet.getDataRange().getLastRow(); //シートの最大行数
  const maxColumn = sheet.getDataRange().getLastColumn();  //シートの最大列数
  let inputFlag = 1; //入力しているかを判定する変数

  const data = sheet.getRange(2, 1, maxRow - 1, maxColumn).getValues();
  data.shift();  //見出しを削除


  for (let i = 0; i <= data.length - 1; i++) {
    if (data[i].includes(``) == true) {
      inputFlag = 0;  //空白があった場合、変数を0にすうr
      break  //ループを抜ける
    }
  }

  if (inputFlag == 1) { //inputFlag =1のままの時、チャットを送信
    text = `スプレッドシート入力完了`

    const url = `着信 WebhookのURL`;

    const message = { 'text': text };
    const options = {
      'method': 'POST',
      'headers': {
        'Content-Type': 'application;caerset=UTF-8'
      },
      'payload': JSON.stringify(message)
    };

    UrlFetchApp.fetch(url, options)
  }

}