質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

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

cardamon
cardamon

総合スコア17

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

1回答

0グッド

0クリップ

360閲覧

投稿2022/12/03 07:35

前提

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

.trim()で不要なスペースか改行を削除することができます。

例)

javascript

1const msg = ` 2 3 ダミーテキスト 4 5 6`; 7 8console.log(msg); 9console.log(msg.trim());

修正箇所

javascript

1const goukei = body.split('(複数選択可)')[1].split('ログイン')[0].trim();

コメントでご自身でもメモされているのでもう試されて、それで無理だったのでしょうか?
質問者様のコメント↓

/*: ↑replaceは指定文字列の置換(削除)     \t=タブ文字削除、\n=改行削除、\s=空白、g=2個目以降もの意   trim=前後の空白・改行を削除 */

投稿2022/12/03 14:28

Cocode

総合スコア2231

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

cardamon

2022/12/04 00:42

ありがとうございます。頂いたコードで無事うごきました! trimは、結論試せていませんでした。 実は、示していただいたコメントは、昔に本で読んだものをコピペして色んなスクリプトにメモがわりに貼っており、すっかり風景化しており見落としていました。(メモの意味がないですね…お恥ずかしい…) こんな矛盾するようなコードにも関わらず、的確なアドバイスと質問を投げかけていただき、ありがとうございます…!(この恥ずかしさで、もうtrimだけは一生忘れないと思います。。)
cardamon

2022/12/04 00:45

↑回答へのコメントをしようとすると、 >アプリケーション エラー: クライアント側の例外が発生しました (詳細については、ブラウザー コンソールを参照してください) 。 というエラーが出て、文章の語順が、ぐちゃぐちゃになり、日本語がおかしくなってしまいます…
cardamon

2022/12/04 00:53

(文章がぐちゃぐちゃになったり、正常に表示されたりするのは、teratail不具合のようです) ご回答ありがとうございます!
Cocode

2022/12/04 15:21

.trim()マスターおめでとうございます!💮

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。