【GAS】Gmailの本文で、指定文字列〜指定文字列の間を抜き出す時、目に見えない不要な改行が入ってしまう(スプレッドシート転記)

前提

Gmailをスプレッドシートに自動転記するスクリプトを作っています。

実現したいこと

メール本文の、指定文字〜指定文字の間を抜き出したいです。

発生している問題

文字列の間は抜き出すと、なぜか、目に見えない?改行が残ってしまいます。
イメージ説明

試したこと

htmlメールなのが問題かと考えたのですが、システム上、プレーンテキストで受け取ることができず手詰まりとなっています。

また、以下のコードを試しました。

該当のソースコード

GoogleAppsScript

const testMessage = () => { const condition = 'subject:(おしらせ) -label:(おしらせ転記済)'; const start = 0; const max = 500; const threads = GmailApp.search(condition, start, max); const messages = GmailApp.getMessagesForThreads(threads); const label = GmailApp.getUserLabelByName('おしらせ転記済') ?? GmailApp.createLabel('おしらせ転記済'); //もし転記済ラベルのない該当メールがなければ戻る if (messages.length === 0) { console.log('検索条件に合致するメールが見つかりませんでした。'); return; } const data = messages.map(message => { const body = message[0].getPlainBody(); const date = message[0].getDate(); //メール件名から"[formrun] 「🚨おしらせ🚨」(管理用フォーム名)にフォーム投稿/回答がありました ["という文字列を削除 const subject = message[0].getSubject().replace('[formrun] 「🚨おしらせ🚨」(管理用フォーム名)にフォーム投稿/回答がありました [', ''); //(複数選択可)を探す(改行を含まず、"(複数選択可)"〜改行手前まで) const goukei = body.split('(複数選択可)')[1].split('ログイン')[0]; /*: ↑replaceは指定文字列の置換(削除)     \t=タブ文字削除、\n=改行削除、\s=空白、g=2個目以降もの意   trim=前後の空白・改行を削除 */ // 場所、日付、時間を探す(改行の手前まで) const datum = [date, subject, goukei]; return datum; }); const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName(‘おしらせ転記'); // 記入可能な行(最終行の次の行) const lastRow = sheet.getLastRow() + 1; // 最終行の次の行を、A列から、入力 sheet.getRange(lastRow, 1, messages.length, data[0].length).setValues(data); // 転記済ラベルをつける  threads.forEach(thread => thread.addLabel(label)); delTrigger(); setTrigger(); } function setTrigger() { const time = new Date(); const regWeekDay = /[1-7]/; //月曜~日曜を判定するための正規表現 const regWorkHours = /^(1[0-7]|[5-9])$/; //9~17の数字範囲を判定する正規表現 //★日時かえたら、↑プルダウンsetTriggerを選び実行を忘れず押す★ //実行した時間が9~17時 かつ 実行した日が月曜~日曜 ならば if (regWorkHours.test(time.getHours()) && regWeekDay.test(time.getDay())) { //次の時間 (hour) の 00分で testMessage を実行する時間指定タイマーをセット time.setHours(time.getHours() + 1); //次の00分にしたい時は+1、でなければ;0 time.setMinutes(03); ScriptApp.newTrigger('testMessage').timeBased().at(time).create(); } } function delTrigger() { const triggers = ScriptApp.getProjectTriggers(); for (const trigger of triggers) { if (trigger.getHandlerFunction() == "testMessage") { ScriptApp.deleteTrigger(trigger); } } }

コメントを投稿

0 コメント