ネットフリマで売れた商品の売上管理表を、スプレッドシートで作っております。商品が売れるたび購入通知をgmailで取得し、メールに記載されている商品情報 (商品名・購入された日時など)がシート上に自動追記されるプログラムをGASで作っております。 商品情報が重複で取得されないよう、トリガーで1時間ごとにプログラムを実行し、毎度1時間前以内に送られてきた購入通知のメールだけを取得したいです。
1時間ごとに、過去1時間以内の5件分の新規購入の通知メールのみを取得するコード「strTerms」を作成しました。
ですが、このコードを実際の売上管理表のスクリプトに加えると、うまく作動しません。
現時点でわかっていることは、
________________
■
この日時指定コード (strTerms) が正常に作動するかテスト用のスクリプトで試したところ、問題なく作動しました。なので日時指定のコードに書き間違いはないということ。
■
実際の売上管理表のスクリプトは上記のstrTermsがない状態だとちゃんと動き、過去5件分の購入通知メールを正常に取得してくれます。なので管理表のコード自体にも間違いはないということ。
■
上記2つの、
・日時指定コード strTerms (間違いなし)
・売上管理表のスクリプト (同じく間違いなし)
を組み合わせて実行すると、検索条件に合致していないまったく無関係なメールが取得され、スプレッドシート上にその内容が表記されてしまうということ。
__________________
以上3つの事実から、検索コードの書き方か、あるいは環境設定に問題があるのかなと考えているのですが、これについてよろしければアドバイスをいただけないでしょうか?
すみませんがよろしくお願いします。
※
実際の検索条件のコードで、「,strTerms」の直前には半角スペースを入れています。なのでその点のケアレスミスもないです。
以下実際のコードです。
function autoRefresh() { //受信日時指定 const date = new Date() ;//現在時刻を取得 const unixTime = date.getTime();//UNIX TIMEに変換 const now = Math.floor(unixTime/1000); //ミリ秒を秒に変換 const term = now - 3600; //現在時刻から1時間(3600秒)前 const termStr = term.toString(); //検索期間を文字列に変換 const strTerms = 'after:'+ termStr; //検索条件:termの期間条件に合致するメール const condition = ("subject:発送をお願いします from:no-reply@mercari.jp" ,strTerms); //半角スペースで連結 const thread = GmailApp.search(condition, 0, 5); //条件にマッチしたスレッドを取得 const messages = GmailApp.getMessagesForThreads(thread); //スレッドからメールを取得する for(var i=0; i<messages.length; i++){ var nichiji = messages[i][0].getDate(); var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); var plainBody = messages[i][0].getPlainBody(); var name =plainBody.match(/商品名.*/); var price =plainBody.match(/商品価格.*/); var site =plainBody.match(/メルカリをご利用.*/); sheet.getRange(lastRow+1,2).setValue("=ROW()-75"); sheet.getRange(lastRow+1,3).setValue(name[0].replace('商品名 : ', '')); sheet.getRange(lastRow+1,5).setValue(site[0].replace('をご利用いただきありがとうございます。', '')); sheet.getRange(lastRow+1,7).setValue(nichiji); sheet.getRange(lastRow+1,8).setValue(price[0].replace(/[^0-9]/g, '')); sheet.getRange(lastRow+1,9).setValue(0); sheet.getRange(lastRow+1,2,1,15).setBorder(true, true, true, true, true, true); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/15 02:05
2020/03/15 06:01