前提
こちらでアドバイス頂きながら、Gmailに届く注文メールをスプレッドシートに転記する仕組みを作りました。(個人飲食店で、プログラミング初学者です)
具体的には、最新500件のメールの中で、件名に「新規注文番号」が含まれ、ラベル「転記済」がついていないメールのスレッドを探し、メール本文の必要情報を取得し、スプレッドシートの「予約表」シートに転記するという内容です。
発生している問題・エラーメッセージ
この転記作業が、手動実行orスプレッドシート編集時トリガーに設定すると正常に動くのですが、時間主導トリガーに設定するとエラーが出ます。
エラーメッセージ TypeError: Cannot read property 'length' of undefined at tenkiMessage(splitコード:35:53)
該当のソースコード
コードは、以下です。
GoogleAppsScript
1 2const tenkiMessage = () => { 3const condition = 'subject:(新規注文番号) -label:(転記済)'; 4 5const start = 0; const max = 500; 6const threads = GmailApp.search(condition, start, max); 7 8//検索条件に該当するスレッド一覧を取得 9const messages = GmailApp.getMessagesForThreads(threads); 10 11const label = GmailApp.getUserLabelByName('転記済'); 12 13const data = messages.map(message => { 14const body = message[0].getPlainBody(); 15 16 const date = message[0].getDate(); 17 const subject = message[0].getSubject().replace('新規注文番号', ''); 18 const goukei = body.split('合計:')[1].split('\n')[0]; 19 20 // \t=タブ文字削除、\n=改行削除、\s=空白、g=2個目以降もの意 21 const test = body.split('日)')[1].replace(/[\s\t\n]/g,"") 22.split('==========')[0].trim(); 23 const basyo = body.split('1)場所を選ぶ↓:')[1].split('\n')[0]; 24 const hiduke = body.split('2)日付を選ぶ↓')[1].split('\n')[0]; 25 const jikan = body.split('3)時間を選ぶ↓')[1].split('\n')[0]; 26 27const datum = [date, subject, goukei, test, basyo, hiduke, jikan]; 28return datum; 29}); 30const ss = SpreadsheetApp.getActiveSpreadsheet(); 31const sheet = ss.getSheetByName('予約表'); 32 33// 最終行を取得 34const lastRow = sheet.getLastRow() + 1; 35 36sheet.getRange(lastRow, 1, messages.length, data[0].length).setValues(data); 37 38threads.forEach(thread => thread.addLabel(label)); 39}
参考にしたページ
https://teratail.com/questions/109959
初歩的なつまずきかもしれず恐縮ですが、参考サイトや、なにかヒントになるアドバイスなど頂けましたら幸いです。

回答1件
あなたの回答
tips
プレビュー