GASでGmailに届いたたのめーるからの注文明細をスプレッドシートに書き出したく下記の様なコードを書きました。
ちなみにたのめーるからのメールも下記にあります。
このGASの記述で問い合わせ番号、購入部署、お支払金額はスプレッドシートへの書き出しは出来るのですが、
ご提供価格(税抜)が取って来れません。
正規表現の問題かもしれませんがコピペしてみても書き出しが出来ないので何か他の問題があるのかもしれないと考えています。
ちなみvar m=[...body.matchAll(/お支払い金額(税込):(.?)\r\n/g)];のお支払金額を商品名に代えると書き出しできます。
ただ商品名分だけお問い合わせ番号等も再度スプレッドシートに書き出されてしまい行が増えてしましますのでそこも改善出来るならしたいと考えています。
何かアドバイスございましたら助言いただけましたら幸いでございます。
タイトル:【アサヒ商会 たのめーるMA】ご注文ありがとうございました
本文:この度はたのめーるをご利用頂き、誠にありがとうございます。
以下の内容でご注文を承りました。
お問い合わせ番号:U12345678(お問い合わせの際にご連絡ください)
ご注文日時:2021年7月14日 10時43分
購入部署:総務課
お支払い金額(税込):1,000円
■お届け予定とご注文明細
【在庫商品】以下の商品は、2021年7月15日にお届け予定です。
商品名:マグエックス 両面カラーマグネットシート 300×100×1mm 赤/白 MSR-10RW 1枚
お申込番号:123-4560
ご提供価格(税抜):334円 ご注文数:1 金額(税抜):334円
商品名:マグエックス マグネット粘着付シート 強力カットタイプ 25×25×1.2mm MSWFPC-12 1パック(48片)
お申込番号:012-3456
ご提供価格(税抜):333円 ご注文数:1 金額(税抜):333円
商品名:TANOSEE 合皮製ネームカードホルダー ヨコ型 ストラップ付 ブラック 1個
お申込番号:000-0000
ご提供価格(税抜):333円 ご注文数:2 金額(税抜):33③円
小計(税抜) :1000円
課税対象額 :1000円
消費税 :100円
合計(税込) :1,100円
(10% 対象
小計(税抜) :1,100円
消費税 :100円
合計(税込) :1,100円)
GAS
1コード
//シートを取得する。
var sheet = SpreadsheetApp.getActiveSheet();
function getMail() {
var threads = GmailApp.search('subject:たのめーる');
// メール検索する文字列:今回はタイトルにたのめーると入っているもの
var str = "subject:たのめーる";
// 上記の文字列に合致するスレッドを取得(とりあえず100件取得します)
var threads = GmailApp.search(str,0,100);
// メッセージを取得する
var messages = GmailApp.getMessagesForThreads(threads);
for(var i = 0; i < messages.length; i++){
for(var j = 0; j < messages[i].length; j++){
//メッセージIDを取得(重複を防ぐため) var messageId = messages[i][j].getId(); //もし、スプレッドシートに存在したら実行しない if(!hasId(messageId)){ //メール受信日時を取得 //var mailDate = messages[i][j].getDate(); // メッセージの本文をプレーンテキストで取得+取得出来てるかをlooger.log確認 var body = messages[i][j].getPlainBody(); Logger.log(body); //正規表現をマッチさせ変数に格納 var No = /お問い合わせ番号*:(.*?)\r\n/.test(body)? RegExp.$1 : ''; var Time = /ご注文日時*:(.*?)\r\n/.test(body)? RegExp.$1 : ''; var Part = /購入部署*:(.*?)\r\n/.test(body)? "'"+RegExp.$1 : ''; var Money = /お支払い金額(税込)*:(.*?)\r\n/.test(body)? "'"+RegExp.$1 : ''; // elemntを複数取得し、そのままセルに書き込むようにする var m=[...body.matchAll(/お支払い金額(税込)*:(.*?)\r\n/g)]; for (var k=0; k<m.length; k++) { var Element=(m[k][1]); //セルに行を追加する(ID、日時問い合わせ番号、ご注文日時、購入部署、お支払金額) sheet.appendRow([messageId,No,Time,Part,Money,Element]); } } }
}
}
// 同じIDのメールは転記しないようにするため、すでにIDがあるかどうか調べる関数
function hasId(id){
//今回は1列目にメールIDを入れていくので1列目から探す
var data = sheet.getRange(1, 1,sheet.getLastRow(),1).getValues();
var hasId = data.some(function(value,index,data){
//コールバック関数
return (value[0] === id);
});
return hasId;
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/17 14:46