みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptでフォーム送信メールからデータを抜き出してスプレッドシートに登録するツールを作成しています。
前回の記事はコチラです。

Gmailに届いたメールから正規表現でデータを取得するスクリプトを作成しました。
データを取り出すことはできましたので、あとはスプレッドシートに蓄積していく処理が必要ですね。
とうことで、今回はGoogle Apps Scriptでメールで取得したデータをスプレッドシートに蓄積する方法をお伝えします。
では、行ってみましょう!
前回のおさらいと今回のお題
まずは前回のおさらいから。
作成したスクリプトはコチラでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function myFunction() { var query = 'subject:([テスト]フォーム登録通知)'; var threads = GmailApp.search(query, 0, 30); var messages = GmailApp.getMessagesForThreads(threads); for(var i=0; i < messages.length; i++) { for(var j=0; j < messages[i].length; j++) { var body = messages[i][j].getPlainBody(); Logger.log(fetchData(body, '名前:', '\r')); Logger.log(fetchData(body, '年齢:', '才')); } } } function fetchData(str, pre, suf) { var reg = new RegExp(pre + '.*?' + suf); var data = str.match(reg)[0] .replace(pre, '') .replace(suf, ''); return data; } |
だいぶいい感じの長さになってきましたね。
まずfetchDataはメールの本文などの文字列を渡して、そこから正規表現を使って文字列preとsufに挟まれている文字列を返す関数です。
myFunctionでは、Gmailから「[テスト]フォーム登録通知」という件名のスレッドのメッセージを取得して、それぞれのメッセージから「名前」「年齢」を取得するというものです。
このmyFunctionの8,9行目を、スプレッドシートに蓄積する処理に変更していけばよいですね。
メールから取得したデータをスプレッドシートに登録する
では、データを蓄積するために以下のようなスプレッドシートを用意しました。
A列に名前、B列に年齢を蓄積していきたいと思います。
アクティブなシートを取得する
このスプレッドシートにバインドする形でスクリプトを組めば、以下getActiveSheetメソッドでこのシートを取得できますね。
実際のスクリプトは以下のようになります。
1 |
var sheet = SpreadsheetApp.getActiveSheet(); |
コンテナバインドスクリプトについては、以下の記事もご覧ください。

スプレッドシートの最後尾にデータを追加する
スプレッドシートにデータを蓄積するのは簡単です。Sheetオブジェクトに対してappendRowメソッドを使えば、その最後尾にデータを追加してくれます。
これだけで、Sheetオブジェクトの最後尾の行に配列で与えたデータをA列から順番に追加してくれます。

ですから、今回の場合、myFunctionの8,9行目の代わりに
1 2 3 4 |
sheet.appendRow([ fetchData(body, '名前:', '\r'), fetchData(body, '年齢:', '才') ]); |
を入れてあげればよさそうな感じがします。
メールから抽出したデータをスプレッドシートに追加するスクリプト
以上を踏まえてmyFunctionをまとめたのが、以下スクリプトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); var query = 'subject:([テスト]フォーム登録通知)'; var threads = GmailApp.search(query, 0, 30); var messages = GmailApp.getMessagesForThreads(threads); for(var i=0; i < messages.length; i++) { for(var j=0; j < messages[i].length; j++) { var body = messages[i][j].getPlainBody(); sheet.appendRow([ fetchData(body, '名前:', '\r'), fetchData(body, '年齢:', '才') ]); } } } |
これにて実行すると…
おお、できちゃいました。簡単ですね。
まとめ
以上、Google Apps Scriptでメールのデータを抽出してスプレッドシートの最後尾に追加するスクリプトを紹介しました。
- スプレッドシートのコンテナバインドスクリプトを作成してgetActiveSheetメソッドでシートを取得
- appendRowメソッドでシートの最後尾の行にデータを追加する
…ですが、もう一回実行すると…
同じメールからデータを取得してきちゃうんです。
次回はこの問題を解決していきます。

どうぞお楽しみに!
連載目次:GASで正規表現を使ってデータを抽出&登録
正規表現を使うとGoogle Apps ScriptでメールやHTMLドキュメントからデータを抽出することができます。本シリーズでは、フォーム送信の通知メールからデータを抽出してスプレッドシートに追加するツールの作成を目指します。- Google Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプト
- Google Apps Scriptで正規表現でマッチした文字列から不要な部分を削除する
- Google Apps ScriptでGmailの受信メールから正規表現でデータを抽出する
- Google Apps Scriptでメールから正規表現で抽出したデータをスプレッドシートに蓄積する方法
- Google Apps ScriptでGmailのメッセージIDを取得する方法
- Google Apps Scriptでスプレッドシートの列データを配列として取得する方法
- GASで列データの配列に特定の値が含まれているかを判定するsomeメソッドの使い方
- GASでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版
投稿者プロフィール
- 株式会社プランノーツ 代表取締役
-
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。
コメント