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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

1547閲覧

Gmailの本文をセルに分けてスプシに吐き出したい

daddy3dy

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/06/21 05:01

前提・実現したいこと

Gmailの本文にある「名前」「電話番号」「メールアドレス」などの情報を項目ごとのセルに分けてスプレッドシートに吐き出そうとしています。

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

【送信時刻】 2021年06月15日 18時43分27秒 【お名前】 テスト テスト

例えば、本文が上のようになっている場合、どうすれば「2021年06月15日 18時43分27秒」「テスト テスト」を個別のセルに吐き出せるのでしょうか…。

該当のソースコード

java

1function myFunction() { 2 // 情報を吐き出すシートを指定 3 var sheet = SpreadsheetApp.getActiveSheet(); 4 // gmailから処理済みでないメールを取得 5 var threads = GmailApp.search('subject:メールフォームからご予約がありました -label:処理済み'); 6 // スレッド内のメール一覧を取得 7 for(var i=0; i<threads.length; i++){ 8 var thread = threads[i]; 9 var mails = thread.getMessages(); 10 // メール一覧からメールを一つずつ取得」 11 for(var j=0; j<mails.length; j++){ 12 var mail = mails.getPlainBody(); 13 // メール内の項目を取得(**ここがうまくいきません**) 14 var senttime = mail.match(/送信時刻: (.*)/); 15 var kanjiname = mail.match(/お名前 (漢字): (.*)/); 16 var kananame = mail.match(/お名前 (ふりがな): (.*)/); 17 var email = mail.match(/メールアドレス: (.*)/); 18 var tel = mail.match(/電話番号: (.*)/); 19 var shop = mail.match(/希望店舗: (.*)/); 20 var bookingdate = mail.match(/ご希望の日時: (.*)/); 21 var bookingtime = mail.match(/ご予約時間: (.*)/); 22 var policy = mail.match(/プライバシーポリシー: (.*)/); 23 // シートの最終行を取得 24 var lastRow = sheet.getLastRow() + 1; 25 // セルに値を転記 26 sheet.getRange(lastRow, 1).setValue(senttime[j]); 27 sheet.getRange(lastRow, 2).setValue(kanjiname[j]); 28 sheet.getRange(lastRow, 3).setValue(kananame[j]); 29 sheet.getRange(lastRow, 4).setValue(email[j]); 30 sheet.getRange(lastRow, 5).setValue(tel[j]); 31 sheet.getRange(lastRow, 6).setValue(shop[j]); 32 sheet.getRange(lastRow, 7).setValue(bookingdate[j]); 33 sheet.getRange(lastRow, 8).setValue(bookingtime[j]); 34 sheet.getRange(lastRow, 9).setValue(policy[j]); 35 } 36 // スレッドに処理済みラベルを付ける 37 var label = GmailApp.getUserLabelByName('処理済み'); 38 thread.addLabel(label); 39 } 40}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(.)では複数行にまたがる文章を抜き出す場合には使えません。
そのため、(.
)ではなく指定した文字から文字列全体を取得する([\s\S]*)を使用すればいいと思います。

【送信時刻】
2021年06月15日 18時43分27秒

【お名前】
テスト テスト

【ふりがな】
てすと てすと

var senttime = mail.match(/【送信時刻】([\s\S])【お名前】/);
var kanjiname = mail.match(/【お名前】([\s\S]
)【ふりがな】/);

投稿2021/06/21 11:04

kinpika

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daddy3dy

2021/06/21 11:12

ありがとうございます!!助かりました…!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問