見出し画像

【GAS】スプレットシート連携_実践編その1(メール送信)

おはようございます!MARIEです(`・ω・´)ゞ

前回の記事では、GASでアプリケーションと連携をする際の前提のお話やスプレットシートの構造などについてお話をいたしました。

今日はスプレットシートを使ってGASを動かす実践編その1。
メールの送信を行いたいと思います!

シートのデータ全てを取得して処理をする

前回行ったことの振り返り。

function getAndSet() {
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');

 const range = sheet.getRange("A1");
 const value = range.getValue();

 range.setValue(value + 'って優しいよね。');
}

このやり方だと、「A1」のセルの情報しか取得ができませんよね。

今回の実践編では、「シートの中にあるデータ全てを取得する」をやってみます!そしてなんと!基礎編で学んだ「二次元配列」がここで役立ってくるのです。

【アンケート集計のプログラムを作ってみよう】
※アンケート結果はこんな感じ

画像1


※一連の流れ↓↓

■旅行に行きたいところのアンケート集計表がある
■北海道、沖縄、大阪が何票あるのか集計したい
■集計した結果をメールに送りたい
(メール送信)
■宛先:自分のメールアドレス
■件名:旅行先アンケート結果
■本文:
アンケート結果を報告します。
-北海道●人
-沖縄●人
-大阪●人
でした。

※ぶっちゃけ集計だけなら関数でできちゃいますが、そこはつっこまずでお願いいたしますm(_ _)m

まず今回の処理について、大きく2つに分けるとすると、「集計」と「メール送信」となりますが、もう少し細分化して考えてみると、以下のようになります。

■集計
-1行目はヘッダーの部分なのでいらない情報
-2行目から11行目の情報が必要な情報
-B列の情報を1行ずつ取得していけばよい
■メール送信
-集計結果をメールする(TO、件名、本文)

①スクリプトエディタに、日本語で手順を書いてみよう

function sendMailTravelDestination() {
 //sheet情報を特定

 //シート内の全てのデータを取得する(範囲を決める)

 //北海道、沖縄、大阪の合計を入れる場所を作る

 //1行ずつB列の情報を取得していく

 //全部数え終わったらメールを送る


}

②sheet情報を特定しよう

function sendMailTravelDestination() {

 //sheet情報を特定
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');

  //シート内の全てのデータを取得する(範囲を決める)

 //北海道、沖縄、大阪の合計を入れる場所を作る

 //1行ずつB列の情報を取得していく

 //全部数え終わったらメールを送る

}

③シート内の全てのデータを取得しよう

function sendMailTravelDestination() {

 //sheet情報を取得
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');

 //シート内の全てのデータを取得する(範囲を決める)
 const data = sheet.getDataRange().getValues();

 //一度情報がちゃんと取得できているかdataの中身を一度見てみましょう
 console.log(data);

 //北海道、沖縄、大阪の合計を入れる場所を作る

 //1行ずつB列の情報を取得していく

 //全部数え終わったらメールを送る

}

取得できていますね(゜-゜)<二次元配列で入ってますね。
つまり、dataという配列の中に値がある。

画像2

④各地方の合計を入れる場所を作ろう

function sendMailTravelDestination() {

 //sheet情報を取得
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');

 //シート内の全てのデータを取得する(範囲を決める)
 const data = sheet.getDataRange().getValues();

 //一度情報がちゃんと取得できているかdataの中身を一度見てみましょう
 console.log(data);

 //北海道、沖縄、大阪の合計を入れる場所を作る
 let hokkaido = 0;
 let okinawa = 0;
 let osaka = 0;



 //1行ずつB列の情報を取得していく

 //全部数え終わったらメールを送る

}

⑤二次元配列の欲しい情報を一つずつ取得していこう

function sendMailTravelDestination() {

 //sheet情報を取得
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');

 //シート内の全てのデータを取得する(範囲を決める)
 const data = sheet.getDataRange().getValues();

 //一度情報がちゃんと取得できているかdataの中身を一度見てみましょう
 console.log(data);

 //北海道、沖縄、大阪の合計を入れる場所を作る
 let hokkaido = 0;
 let okinawa = 0;
 let osaka = 0;

 //1行ずつB列の情報を取得していく
 for (let i = 1; i < data.length; i++) {
   console.log(data[i][1]);
 }


 //全部数え終わったらメールを送る

}

しっかり1つずつの情報が取得できているのがわかります!

画像3

⑥各地方をカウントしよう

function sendMailTravelDestination() {

 //sheet情報を取得
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');

 //シート内の全てのデータを取得する(範囲を決める)
 const data = sheet.getDataRange().getValues();

 //北海道、沖縄、大阪の合計を入れる場所を作る
 let hokkaidoCount = 0
 let okinawaCount = 0
 let osakaCount = 0

 //1行ずつB列の情報を取得していく
 for (let i = 1; i < data.length; i++) {
   const travel = data[i][1];
   if (travel === '北海道') {
     hokkaidoCount++;
   } else if (travel === '沖縄') {
     okinawaCount++;
   } else if (travel === '大阪') {
     osakaCount++;
   }
 }
 console.log("北海道" + hokkaidoCount);
 console.log("沖縄" + okinawaCount);
 console.log("大阪" + osakaCount);

 //全部数え終わったらメールを送る

}

数えられましたね!

画像4

⑦メール本文や宛先を作成してメールを送る

function sendMailTravelDestination() {

 //sheet情報を取得
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');

 //シート内の全てのデータを取得する(範囲を決める)
 const data = sheet.getDataRange().getValues();

 //北海道、沖縄、大阪の合計を入れる場所を作る
 let hokkaidoCount = 0
 let okinawaCount = 0
 let osakaCount = 0

 //1行ずつB列の情報を取得していく
 for (let i = 1; i < data.length; i++) {
   const travel = data[i][1];
   if (travel === '北海道') {
     hokkaidoCount++;
   } else if (travel === '沖縄') {
     okinawaCount++;
   } else if (travel === '大阪') {
     osakaCount++;
   }
 }
 console.log("北海道" + hokkaidoCount);
 console.log("沖縄" + okinawaCount);
 console.log("大阪" + osakaCount);

 //全部数え終わったらメールを送る
 const body = `アンケートの結果は
 -北海道${hokkaidoCount}人
 -沖縄${okinawaCount}人
 -大阪${osakaCount}人
 でした。`

 const to = '自分のメールアドレス';
 const subject = '旅行先アンケート結果'

 GmailApp.sendEmail(to, subject, body);

}

プログラムを実行してみました(゜-゜)

画像5

無事メールが届きました\(^o^)/

const body = `アンケートの結果は
-北海道${hokkaidoCount}人
-沖縄${okinawaCount}人
-大阪${osakaCount}人
でした。`

↑まずここの部分でメールの本文を作って、

const to = '自分のメールアドレス';
const subject = '旅行先アンケート結果'

↑宛先と件名を作って

GmailApp.sendEmail(to, subject, body);

Gmailアプリを呼び出して、sendEmailという関数を使っています。
この関数に引数としてto,subject,bodyを渡すとメールを送信してくれるという関数です。

コメントを消したパターンのプログラムも貼っておきますね!

function sendMailTravelDestination() {


 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getSheetByName('シート1');


 const data = sheet.getDataRange().getValues();


 let hokkaidoCount = 0
 let okinawaCount = 0
 let osakaCount = 0


 for (let i = 1; i < data.length; i++) {
   const travel = data[i][1];
   if (travel === '北海道') {
     hokkaidoCount++;
   } else if (travel === '沖縄') {
     okinawaCount++;
   } else if (travel === '大阪') {
     osakaCount++;
   }
 }
 console.log("北海道" + hokkaidoCount);
 console.log("沖縄" + okinawaCount);
 console.log("大阪" + osakaCount);


 const body = `アンケートの結果は
 -北海道${hokkaidoCount}人
 -沖縄${okinawaCount}人
 -大阪${osakaCount}人
 でした。`

 const to = '自分のメールアドレス';
 const subject = '旅行先アンケート結果'

 GmailApp.sendEmail(to, subject, body);

}

いかがでしたでしょうか。無事にアンケート結果をメールに送ることができましたでしょうか。
この形の基礎を覚えたら、いろんな場面で応用できそうですね!

では、宿題です!

集計結果をメールではなく、スプレットシートに書き出してみましょう。

宿題は以上です!
ではまた次回、よろしくお願いいたします(`・ω・´)ゞ


この記事が気に入ったらサポートをしてみませんか?