質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

2回答

5544閲覧

【GAS】掃除当番表を自動でメールするプログラムを作りたい。

nepia_infinity

総合スコア14

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2019/03/16 07:37

編集2019/03/17 08:09

イメージ説明

上記のような掃除当番表を作成しました。
このスプレッドシートの表に基づいて、期日が来たら、メールでお知らせするといった事がやりたいと考えています。A列の日付が今日の日付と合致したら、D列に記載のメールアドレスを取得、〇〇さんに本日、あなたが掃除当番ですよ。 本文には、掃除する場所も合わせて伝えられるようにしたいです。

また、土日の場合は、本日の掃除当番の該当者はいません。
undefindという表示が出ないようにしたいと考えています。

イメージ説明
IF文が必要であるという事はわかっているのですが、上手く出来ません。ご教示いただけますでしょうか?テストでメールを送ったところ、全てundefindになってしまいます。おそらく配列から情報を取り出す部分で失敗しているのだと思います。

pixiv insideで公開されていた内容も参考にしましたが、苦戦しています。
https://devpixiv.hatenablog.com/entry/2016/12/19/180000

//ソースコードここから
function inChargeOfCleaning() {
var url = 'https://docs.google.com/spreadsheets/d/1mmRhZxOhjSbJJrYUdDVRD9w9FEmMJAeUGDCkUZWS_e8/edit#gid=0';
spreadsheet = SpreadsheetApp.openByUrl(url);
var sheet = spreadsheet.getSheetByName('掃除当番表');

//シートの内容を読み込んで、日付、曜日、名前、メールアドレス、掃除場所を取得する。

var formattedDate = Utilities.formatDate( new Date(),'Asia/Tokyo', 'M月d日'); //2行目の1列目A2:Aから日付を読み込む
var cal = sheet.getRange(2,1,sheet.getLastRow()-1).getValues() + formattedDate;
var day = sheet.getRange(2,2,sheet.getLastRow()-1).getValues(); //2行目の2列目B2:Bから曜日を読み込む
var nameList = sheet.getRange(2,3,sheet.getLastRow()-1).getValues(); //2行目の3列目 C2:Cから名前を読み込む
var mail = sheet.getRange(2,4,sheet.getLastRow()-1).getValues(); //2行目の4列目 D2:Dからメールアドレスを読み込む
var place = sheet.getRange(2,5,sheet.getLastRow()-1).getValues();//2行目の5列目 E2:Eから掃除をする場所を読み込む

for( var i = 0, l = nameList.length; i < l; i++ );
for( var i = 0, l = day.length; i < l; i++ );
for( var i = 0, l = mail.length; i < l; i++ );
for( var i = 0, l = cal.length; i < l; i++ );
for( var i = 0, l = place.length; i < l; i++ );

var body = 'お掃除をする場所は、' +place[i] +'です。' +'\n'+'よろしくお願いします。';

//Eメールを送る。
/*
if(colDate.toLocaleDateString() == date.toLocaleDateString()) {
var bingo = nameList[i][1];
for(var j = 1; j <= 7; j++) {
text = text + (new Date(values[i+j][0])).toLocaleDateString() + "\t" + values[i+j][1] + "\n";
}
var subject = cal[i] + '(' + day[i] +')' +'の'+ '掃除当番は' + nameList[i] + 'さんです。';

};

GmailApp.sendEmail(mail,subject,body);
*/
Logger.log(cal[i] + day[i] + nameList[i])

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/03/18 08:44

コードブロックに入れるくらいのことはしようよ
guest

回答2

0

ベストアンサー

//でコメントしているところが、仕様を判断した部分です。

javascript

1function inChargeOfCleaning() { 2 var url = 'https://docs.google.com/spreadsheets/d/1mmRhZxOhjSbJJrYUdDVRD9w9FEmMJAeUGDCkUZWS_e8/edit#gid=0'; 3 var spreadsheet = SpreadsheetApp.openByUrl(url); 4 var sheet = spreadsheet.getSheetByName('掃除当番表'); 5 6 var today = Utilities.formatDate( new Date(),'Asia/Tokyo', 'M月d日'); 7 var data = sheet.getRange(2,1,sheet.getLastRow(),5); 8 for(var i = 0; i < data.length; i++) { 9 Logger.log("forの"+(i+1)+"回目"); 10 Logger.log(data[i]); 11 if(data[i][0] === "") { return; } //A列が空だったら処理中断 12 var targetDay = Utilities.formatDate(data[i][0],'Asia/Tokyo', 'M月d日'); 13 if(targetDay !== today) { continue; } 14 GmailApp.sendEmail(data[i][3],targetDay + "(" + data[i][1] + ")の掃除当番は" + data[i][2] + "さんです。" ,"お掃除をする場所は、" +data[i][4] +"です。\nよろしくお願いします。"); 15 return; //今日のデータ行は1行しかないと考える 16 } 17}

余談
ごめんなさいですが、質問者様のコードは直せない。作るのはまじめに見積って多分2000円位ですが、直すのは40万円くらい欲しい。
理由
var formattedDate = Utilities.formatDate( new Date(),'Asia/Tokyo', 'M月d日'); //2行目の1列目A2:Aから日付を読み込む
嘘コメント書いてんじゃねーよ!!

投稿2019/03/18 08:43

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroshi0240

2019/03/18 09:14

なんだかんだpapinianusやさしいですね。
papinianus

2019/03/18 09:16

優しくない印象を与えてしまっていることを猛省します
papinianus

2019/03/18 09:23

あるいは、「甘い」というのが正しいのかもしれないです。
guest

0

getValues()で拾ってきたデータは2次元配列で格納されているはずですから、それぞれplace[i][0],cal[i][0],day[i][0],nameList[i][0]にしてみればどうでしょうか。

投稿2019/03/18 07:42

hiroshi0240

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問