【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」のセルの情報しか取得ができませんよね。
今回の実践編では、「シートの中にあるデータ全てを取得する」をやってみます!そしてなんと!基礎編で学んだ「二次元配列」がここで役立ってくるのです。
【アンケート集計のプログラムを作ってみよう】
※アンケート結果はこんな感じ
※一連の流れ↓↓
■旅行に行きたいところのアンケート集計表がある
■北海道、沖縄、大阪が何票あるのか集計したい
■集計した結果をメールに送りたい
(メール送信)
■宛先:自分のメールアドレス
■件名:旅行先アンケート結果
■本文:
アンケート結果を報告します。
-北海道●人
-沖縄●人
-大阪●人
でした。
※ぶっちゃけ集計だけなら関数でできちゃいますが、そこはつっこまずでお願いいたします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という配列の中に値がある。
④各地方の合計を入れる場所を作ろう
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つずつの情報が取得できているのがわかります!
⑥各地方をカウントしよう
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);
//全部数え終わったらメールを送る
}
数えられましたね!
⑦メール本文や宛先を作成してメールを送る
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);
}
プログラムを実行してみました(゜-゜)
無事メールが届きました\(^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);
}
いかがでしたでしょうか。無事にアンケート結果をメールに送ることができましたでしょうか。
この形の基礎を覚えたら、いろんな場面で応用できそうですね!
では、宿題です!
集計結果をメールではなく、スプレットシートに書き出してみましょう。
宿題は以上です!
ではまた次回、よろしくお願いいたします(`・ω・´)ゞ