前提・実現したいこと
現在GASで、その日の作業をメールで通知するようなコードを作成しています。
スプレッドシート上で対象作業を集計して一覧にしているので、
その内容をメールでそのまま送るような仕様で考えています。
コード上、作業一覧は2つの範囲で取得しているのですが、
スプレッドシート上では以下のような構成にしています。
※内容は日時で更新される
作業1 | 作業2 |
---|---|
追加1 | 削除1 |
追加2 | 削除2 |
追加3 |
また、メールの送信イメージはこのような感じです↓
--------------------------------
本日の作業をお知らせします。
【作業1】
①追加1
②追加2
③追加3
【作業2】
①削除1
②削除2
以上
--------------------------------
発生している問題・エラーメッセージ
冒頭から対象セルの取得までと、通知設定で必要な情報を1件ずつ取得する以降の処理は問題なくできましたが、
作業一覧で必要な情報を1件ずつ取得するfor文で以下のエラーがでています。
TypeError: Cannot read property '0' of undefined
該当のソースコード
GAS
1 //作業一覧で必要な情報を1件ずつ取得 2 for(var i = 0; i < tableAdd.length; i++){ 3 var bodyAdd = tableAdd[i][0]; 4 var bodyDelete = tableAdd[i][1]; 5 }
全体のソースコード
GAS
1function sendNotification(){ 2 //スプレッドシートの取得 3 var ss = SpreadsheetApp.getActiveSpreadsheet(); 4 5 //対象シートの取得 6 const sheet = ss.getSheetByName('作業一覧'); 7 const sheetTsuchi = ss.getSheetByName('通知設定'); 8 9 //対象セルの取得 10 var tableAdd = sheet.getRange(5,20,36).getValues(); //作業1 11 var tableDelete = sheet.getRange(5,21,36).getValues(); //作業2 12 var tableTsuchi = sheetTsuchi.getDataRange().getValues(); //送信用の設定一覧 13 14 15 //作業一覧で必要な情報を1件ずつ取得 16 for(var i = 0; i < tableAdd.length; i++){ 17 var bodyAdd = tableAdd[i][0]; 18 var bodyDelete = tableAdd[i][1]; 19 } 20 21 //通知設定で必要な情報を1件ずつ取得 22 for(var s = 1; s < tableTsuchi.length; s++){ 23 var mailTo = tableTsuchi[0][1]; //宛先 24 var subject = tableTsuchi[1][1]; //件名 25 var text = tableTsuchi[2][1]; //定型文 26 } 27 28 29 var body = text + '\n\n' + bodyAdd + '\n\n' + bodyDelete; 30 31 //メール送信 32 GmailApp.sendEmail(mailTo, subject, body); 33 34}
試したこと
配列指定先をvar bodyAdd = tableAdd[0][0];
にすれば「作業1」の項目だけ取得できますが、
変数に変えてしまうと送信イメージのような列の情報全てが縦に並ぶ形に出力ができません。。
GASを始めたばかりのため配列のやり方をよくわかっておらず
見苦しいコードかと思いますが、どなたか正解を教えていただけますと幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/22 06:32