前提
Gmailをスプレッドシートに自動転記するスクリプトを作っています。
実現したいこと
メール本文の、指定文字〜指定文字の間を抜き出したいです。
発生している問題
文字列の間は抜き出すと、なぜか、目に見えない?改行が残ってしまいます。
試したこと
htmlメールなのが問題かと考えたのですが、システム上、プレーンテキストで受け取ることができず手詰まりとなっています。
また、以下のコードを試しました。
該当のソースコード
GoogleAppsScript
1const testMessage = () => { 2 const condition = 'subject:(おしらせ) -label:(おしらせ転記済)'; 3 4 const start = 0; const max = 500; 5 const threads = GmailApp.search(condition, start, max); 6 const messages = GmailApp.getMessagesForThreads(threads); 7 const label = GmailApp.getUserLabelByName('おしらせ転記済') ?? GmailApp.createLabel('おしらせ転記済'); 8 9 10 //もし転記済ラベルのない該当メールがなければ戻る 11 if (messages.length === 0) { 12 console.log('検索条件に合致するメールが見つかりませんでした。'); 13 return; 14} 15 16 const data = messages.map(message => { 17 const body = message[0].getPlainBody(); 18 19 const date = message[0].getDate(); 20 21 //メール件名から"[formrun] 「🚨おしらせ🚨」(管理用フォーム名)にフォーム投稿/回答がありました ["という文字列を削除 22 const subject = message[0].getSubject().replace('[formrun] 「🚨おしらせ🚨」(管理用フォーム名)にフォーム投稿/回答がありました [', ''); 23 24 //(複数選択可)を探す(改行を含まず、"(複数選択可)"〜改行手前まで) 25 const goukei = body.split('(複数選択可)')[1].split('ログイン')[0]; 26 27 /*: ↑replaceは指定文字列の置換(削除) 28 \t=タブ文字削除、\n=改行削除、\s=空白、g=2個目以降もの意 29 trim=前後の空白・改行を削除 */ 30 31 // 場所、日付、時間を探す(改行の手前まで) 32 33 const datum = [date, subject, goukei]; 34 return datum; 35 }); 36 const ss = SpreadsheetApp.getActiveSpreadsheet(); 37 const sheet = ss.getSheetByName(‘おしらせ転記'); 38 39 // 記入可能な行(最終行の次の行) 40 const lastRow = sheet.getLastRow() + 1; 41 42 // 最終行の次の行を、A列から、入力 43 sheet.getRange(lastRow, 1, messages.length, data[0].length).setValues(data); 44 45 // 転記済ラベルをつける 46 threads.forEach(thread => thread.addLabel(label)); 47 48 delTrigger(); 49 setTrigger(); 50} 51 52function setTrigger() { 53 const time = new Date(); 54 const regWeekDay = /[1-7]/; //月曜~日曜を判定するための正規表現 55 const regWorkHours = /^(1[0-7]|[5-9])$/; //9~17の数字範囲を判定する正規表現 56 57 //★日時かえたら、↑プルダウンsetTriggerを選び実行を忘れず押す★ 58 59//実行した時間が9~17時 かつ 実行した日が月曜~日曜 ならば 60 if (regWorkHours.test(time.getHours()) && regWeekDay.test(time.getDay())) { 61 //次の時間 (hour) の 00分で testMessage を実行する時間指定タイマーをセット 62 time.setHours(time.getHours() + 1); //次の00分にしたい時は+1、でなければ;0 63 time.setMinutes(03); 64 ScriptApp.newTrigger('testMessage').timeBased().at(time).create(); 65 } 66} 67 68function delTrigger() { 69 70 const triggers = ScriptApp.getProjectTriggers(); 71 for (const trigger of triggers) { 72 if (trigger.getHandlerFunction() == "testMessage") { 73 ScriptApp.deleteTrigger(trigger); 74 } 75 } 76 77} 78

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/04 00:42
2022/12/04 00:45
2022/12/04 00:53
2022/12/04 15:21