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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

4610閲覧

GASを使い問合せメールをスプレッドシートに反映

Cha_mi

総合スコア2

Google スプレッドシート

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2020/05/03 12:02

編集2020/05/03 12:09

前提・実現したいこと

営業をやっています。問い合わせフォームからくる資料請求や打合せ希望のメールをスプレッドシートに転載し、営業メンバの方が共有できるようにリスト化するという作業が毎日発生しています。
Gmailに送られてくるこれらのお問合せのメールを、GASを用い、スプレッドシートに自動で転載できるようにできれば少しでも後輩の仕事が減ると思い、3日ほど前からGASの勉強をし始めました。

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

エラーは発生していないのですが、期待しているようにデータがスプレッドシートに反映されず困っています。

反映したい問合せメールは以下の通りです。
ーーーーーーーーーーーーーーーーーーーーーーー
件名:【資料請求申し込み】
本文:
下記のお問い合わせがありました。

【会社名】
XXXXXXX株式会社

【部署名】
XXX部

【氏名】
XXX XXX

【メールアドレス】
XXXXXXXXXXXX@XXXXXXXXX

【電話番号】
XXXXXXXXXXXX

【お問合せ内容】
XXXXXXXXX
yyyyyyyyy

【デモンストレーション希望】
XXX

【知ったきっかけ】
XXX

【関心のあるテーマ】
XXX,yyy,ccc

【社員数】
1000名以上~

【検討状況】
XXXXXXXXX
yyyyyyyyy

ーーーーーーーーーーーーーーーーーーーーーーー

上記のメールをA~M列に以下のようにデータを反映したいです。
日付 件名 会社名 部署 。。。。。検討状況

しかし、私がいろいろ調べて作ったものだと日付と件名しか反映されませんでした。
また、本当に勉強不足で恐縮なのですが、調べて組み合わせたものだとそのスレッドの1番目のものしか抽出することができません。
お力をお借りできないでしょうか。

●改善したいこと
1.日付と件名だけでなく本文の内容も各項目に合わせてスプレッドシートに反映させたい。
2.該当スレッドの1通目の内容だけでなく、問い合わせフォームから24時間以内に送られてきたメールを1日1回全件スプレッドシートに反映させたい。(現状だと24時間以内に送られてきた該当スレッドの1通名のみ)
※なお、以下の記述コードで【お問合せ内容】や【検討状況】が複数行にわたる場合、正しく反映されるか現段階では判別がついていません。複数行にわたる文章の場合以下のコードでは対応できない場合それも合わせてご教示いただけると大変助かります。。。

該当のソースコード

GAS

1function fetchContactMail() { 2 3 /* Gmailから特定条件のスレッドを検索しメールを取り出す */ 4 var query = 'from:"xxx@gmail.co.jp" newer_than:1d'; //検索条件 5 var myThreads = GmailApp.search(query); //条件にマッチしたスレッドを取得 6 var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納 7 8 var valMsgs = []; 9 10 /* 各メールから日時、送信元、件名、内容を取り出す*/ 11 for(var i = 0;i < myMsgs.length;i++){ 12 13 valMsgs[i] = []; 14 valMsgs[i][0] = myMsgs[i][0].getDate(); 15 valMsgs[i][1] = myMsgs[i][0].getSubject(); 16 var plainBody = myMsgs[i][0].getBody(); 17 var company = /【会社名】\n.*?/; 18 valMsgs[i][2] = plainBody.match(company); 19 20 var department = /【部署名】\n.*?/; 21 valMsgs[i][3] = plainBody.match(department); 22 23 var name = /【氏名】\n.*?/; 24 valMsgs[i][4] = plainBody.match(name); 25 26 var email = /【メールアドレス】\n.*?/; 27 valMsgs[i][5] = plainBody.match(email); 28 29 var tel = /【電話番号】\n.*?/; 30 valMsgs[i][6] = plainBody.match(tel); 31 32 var demo = /【デモンストレーション希望】\n.*?/; 33 valMsgs[i][7] = plainBody.match(demo); 34 35 var contents = /【お問合せ内容】\n.*?/; 36 valMsgs[i][8] = plainBody.match(contents); 37 38 var channel = /【知ったきっかけ】\n.*?/; 39 valMsgs[i][9] = plainBody.match(channel); 40 41 var needs = /【関心のあるテーマ】\n.*?/; 42 valMsgs[i][10] = plainBody.match(needs); 43 44 var background = /【検討状況】\n.*?/; 45 valMsgs[i][11] = plainBody.match(background); 46 47 var employees = /【社員数】\n.*?/; 48 valMsgs[i][12] = plainBody.match(employees); 49 } 50 51 /* スプレッドシートに出力 */ 52 if(myMsgs.length>0){ 53 54 var sheet = SpreadsheetApp.getActive().getSheetByName('問合せ転記'); 55 var maxRow=sheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 56 sheet.getRange(maxRow+1, 1, i, 13).setValues(valMsgs); //シートに取得したメッセージのデータを追加 57 58 } 59}

試したこと

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

HTML、CSS、簡単なマクロの知識程度しかないです。HTMLを見てfomrをいじったりができる程度で、jsやGASはこれから自分のスキルアップのために学ぼうとしているところです。
初歩的なところがわからず大変お手数をおかけしますが、ご指導いただけると嬉しいです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

JavaScript

1 var company = /【会社名】\n.*?/; 2 valMsgs[i][2] = plainBody.match(company);

は問題があります。

  1. 正規表現で.(ピリオド)は改行にマッチしないため複数行にまたがる文章を抜き出す場合には使えません。代わりに、[\s\S]を使いましょう。
  2. 【会社名】以降の文字列全体がマッチするので、部署名以降の部分も含まれる。
  3. String.match()のリターンはマッチした場合はArrayを返すのにそのまま代入している。
  4. 【会社名】がそのまま残っている。

他の項目も同様です。

これらを考慮して直すなら、こんな感じになります。

JavaScript

1 var company = /【会社名】\n([\s\S]*)【部署名】/; 2 valMsgs[i][2] = plainBody.match(company)[1]; 3

投稿2020/05/03 17:02

draq

総合スコア2577

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

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

Cha_mi

2020/05/04 09:18

早速のご回答ありがとうございます! まだコードを反映させていませんが、取り急ぎ感謝の言葉をコメントさせていただきます。 引き続きよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問