ifやforEachの中で取得した変数の値が破棄されず、returnされるために必要な処理?

実現したいこと

発生している問題・エラーメッセージ

getSheetMessage() の中で、「message」は問題なく得られているのですが、
呼び出し元の関数内のログで、
Logger.log("メッセージ取得なし")
が表示されてしまいます。取得されているはずの「message」が何らかの理由でreturnされていないようです。

該当のソースコード

Google

1function getSheetMessage() { 2 const ss = SpreadsheetApp.getActiveSpreadsheet(); 3 const sh1 = ss.getSheetByName('data'); 4 const startRows = 2; 5 const sheetData = sh1.getSheetValues(startRows, 1, sh1.getLastRow(), 6 sh1.getLastColumn()); 7 const today = new Date(); 8 9 // シートの各行ごとにデータを取り出す 10 sheetData.forEach(function(value, index) { 11 if (new Date(value[0]).getTime() < today.getTime()) { 12 // sh1.getRange(startRows + index,3 ).setValue("済"); 13 var message = sh1.getRange(startRows + index,2).getValue(); 14 Logger.log(message) // 。。。ログ1 15 // return message; //はじめ、ここにあったが、18行目に移動した 16 } 17 }); 18 Logger.log("forEachの外の"+message) //。。。ログ2 19 return message; 20} 21 22 23//return先の関数’(該当部分抜粋) 24 ・・・ 25 26 const message = getSheetMessage(); 27 if (!message) 28 { 29 Logger.log("メッセージ取得なし"); 30 return; 31 } 32 33 GmailApp.sendEmail("●●●@gmail.com",title,message); 34 35

試したこと

●return が forEachやif文の中にあることがおかしいだろうと思い、現在の位置(19行目)に移しました。
●特に18行目(ログ2)で、messageが空になってしまっていることが確認できています。

ifまたはforEach内で取得した message変数を、
その外にまで持っていくにはどのようにコードを書けばよいか? 
お教えいただきたいです。

どうぞよろしくお願い致します。

コメントを投稿

0 コメント