前提
GAS(Google Apps Script)にて、Gmailより必要な本文情報をスプレッドシートに抽出して、自動転記できるようにしたいです。
実現したいこと
- スプレッドシートのセルに入力している任意の日付以降のメールを抽出してくるように日付指定をしたいです。
試したこと
こちらのURLサイトを参考に作成してみました。
毎度すべてのデータを拾ってきてしまうため、前回抽出してきたあと以降、もしくは日付指定ができたら、と考えております。
→// 抽出条件指定
let query = 'subject:"◎◎",after:2022/12/09';
と現在記入しておりますが、なにかほかに良い方法があればご教示いただきたく存じます。
◎2022/12/13追記
スプレッドシートセルF2にて日付を記載し、そこから定義できたらと思っているのですが、文字通り取得してきてからの抽出条件指定の部分、「after:」への紐づけがよくわからず困っております。
また、シートを定義した場合、「書き込むシートを取得、アクティブシートを取得しているが任意のシートでOK」の部分も同じくシート名を定義させた方が間違いないでしょうか?
アドバイスいただけましたらうれしく思います。何卒よろしくお願い申し上げます。
コード function getValue() { // スプレッドシート&シートオブジェクトを取得 const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('抽出'); // F2セルを選択 var range = sheet.getRange('F2'); // セルの値を取得 var value = range.getDisplayValue(); } function myFunction(){ // 抽出条件指定 let query = 'subject:"お問い合わせ",after:"F2"'; //問合せごとの情報が要素になった二次元配列を取得 let gmail = getGmail(query); // 書き込むシートを取得、アクティブシートを取得しているが任意のシートでOK let sheet = SpreadsheetApp.getActive().getActiveSheet(); //要素ごとにappendRowメソッドを呼び出して最終行に書き込む繰り返し処理を実行 gmail.forEach(info => sheet.appendRow(info)); }
◎2022/12/15追記
いろいろとお教えいただき修正をさせていただいておりますがエラーが出てしまっているのかスプレッドシートに反映がされない状態です……。
https://tetsuooo.net/gas/512/ のサイトさまのコードに、after:後、日付を手打ちで追加し、正常に拾ってくることが確認できているコードも記載させていただきます。↓
コード function myFunction(){ // 抽出条件指定 let query = 'subject:"お問い合わせ",after:2022/12/09'; //問合せごとの情報が要素になった二次元配列を取得 let gmail = getGmail(query); // 書き込むシートを取得、アクティブシートを取得しているが任意のシートでOK let sheet = SpreadsheetApp.getActive().getActiveSheet(); //要素ごとにappendRowメソッドを呼び出して最終行に書き込む繰り返し処理を実行 gmail.forEach(info => sheet.appendRow(info)); } function getGmail(query) { //Gmail取得ここから //Gmailの履歴からマッチするメールを一覧化 let threads = GmailApp.search(query); let gmailInfo = new Array(); //一覧化したメールの件数分繰り返し threads.forEach(function(thread) { // スレッド内のメール一覧を取得 let messages = thread.getMessages(); // メールを一つずつ取り出す messages.forEach(function(message) { // メール本文 let plainBody = message.getPlainBody(); // Logger.log(plainBody); // 受付日 let date = plainBody.match(/受付日:(.*)/); // Logger.log(data); // 代表者・ご担当者様氏名 let name = plainBody.match(/代表者・ご担当者様氏名:(.*)/); // Logger.log(name); // 事業形態 let mail = plainBody.match(/事業形態:(.*)/); // Logger.log(mail); // 電話番号 let tel = plainBody.match(/電話番号:(.*)/); // Logger.log(tel); //各メール情報を組みとした二次元配列として格納 gmailInfo.push([date[1],name[1],mail[1],tel[1]]); }); }); return(gmailInfo); }

回答1件
あなたの回答
tips
プレビュー