(license)みなさん、こんにちは!タカハシ(@ntakahashi0505)です。Scriptでフォーム送信メールからデータを取得してスプレッドシートに蓄積していくツールを作っています。Scriptでフォーム送信メールからデータを抜き出してスプレッドシートに登録するツールを作成しています。今回はメールで取得したデータをスプレッドシートに蓄積する方法をお伝えします。tonari-it.com2017.11.10メールからデータを抽出してスプレッドシートに書き込むまでを作成しました。このスクリプトを複数回実行すると、何度も同じメッセージからデータを取得してしまうという問題があるんですね。今回はこの課題を「メッセージID」を使うことで解決をしていきます。ScriptでGmailメッセージのメッセージIDを取得する方法です。data;}muFunctionでは、「[テスト]フォーム登録通知」という件名のスレッドを検索し、そのメッセージを取得します。その各メッセージについて、関数fetchDataにより欲しいデータである「名前」と「年齢」を抽出して、スプレッドシートの最終行にそのデータを追加していくというものです。それで、fetchDataには正規表現を使用しています。今回のお題しかし、このスクリプトは複数回実行すると、以下のように同じメッセージを何度も取得して、データを抽出してしまうので、重複データが増えていってしまいます。今回はこの何度も同じメッセージからデータを取得してしまうという問題を解決していきます。メッセージIDを取得するこの問題を解決する方法はいくつか考えられます。以下記事のように、取得したメッセージを既読にすることを「処理済み」の目印とする方法もあります。Scriptで問い合わせメールを都度スプレッドシートに追加していく方法についてお伝えします。tonari-it.com2016.05.15今回は、別の方法としてメッセージIDを使う方法を考えていきたいと思います。メッセージIDとはメッセージIDとはその名の通り、メッセージに一意に割り当てられたIDです。そのメッセージIDを使って、重複を防ぐための方針は以下の通りです。getMessagesForThreadsメソッドで取得した各メッセ―ジについて、メッセージIDを取得する既にスプレッドシートのC列に同じメッセージIDが存在していないならば初めて取得するメッセージなので、データを取得するスプレッドシートには、名前、年齢とともにメッセージIDを追加するこれで、同じメッセージから取得しようとするのを防ぐのです。getIdメソッドでメッセージIDを取得するメッセージIDを取得するには、getIdメソッドを使用します。Messageオブジェクト.getId()試しにメッセージIDを取得してみましょう。{Logger.log(messages[i][j].getId());}}}このスクリプトを実行してみますとそれぞれのメッセージのメッセージIDを取得することができました。メッセージIDをスプレッドシートに書き込むこれを踏まえて、メッセージIDもデータとともにC列に書き込むようにスクリプトを修正をしてみます。'才'),id]);}}}10行目でメッセージIDを取得して、15行目でappendRowの配列に追加をしています。