GASを用いてGmailから特定の情報を抽出してスプレッドシートへ転記したい
解決したいこと
Gmailから注文内容を読み取って、スプレッドシートへ必要な情報を転記したいです。
メール内容
[ ポイント利用 ] 0
[獲得予定ポイント合計] 0
[ 受付番号 ] AAAAA
[ 品番 ] BBBBB
[ 商品名 ] CCCCC
[メーカー品番] DDDDD
[ 注文点数 ] 5点
[ 注文単価 ] \1,267
発生している問題・エラー
match関数を用いて、抽出しようとしているのですが、メール文章のスペースが原因なのか上手く情報を拾えません。
order_id:Array(2)
0: " ポイント利用 ] 0"
1: "ポイント利用 ] 0"
が返されてしまいます。
本来はorder_idでAAAAAを返して欲しいです。
また、注文単価は\を除いた、1,267を
注文点数の部分は、5点
ではなく、5を返すようにする方法もご教示いただけますと幸いです。
該当するソースコード
function getemessage2() {
//Gmailから購入メールスレッドを抽出
const query = 'subject:ご注文内容控え newer_than:2d'
//const start = 0 //検索範囲の開始地点
//const end = 5 //検索範囲の終了地点
const threads = GmailApp.search(query);
const messagesForThreads = GmailApp.getMessagesForThreads(threads);
// 書き込むシートを取得、クリア
var sheet = SpreadsheetApp.getActive().getSheetByName('注文転記用');
sheet.clear();
// 見出し
sheet.getRange('a1').setValue("受付番号");
sheet.getRange('b1').setValue("品番");
sheet.getRange('c1').setValue("商品名");
sheet.getRange('d1').setValue("注文数");
sheet.getRange('e1').setValue("注文単価");
for (var thread of messagesForThreads){
for (var message of thread){
//新規注文メール本文を取得
var message_body = message.getPlainBody()
console.log('%s', message_body);
//商品数をカウント
const amount_items = message_body.match(/品番.*/g);
console.log('%s', amount_items.length);
for(let j = 0;j<amount_items.length;j++){
// 最終行を取得
var lastRow = sheet.getLastRow() + 1;
//情報取得
var order_id = message_body.match(/[ 受付番号 ] (.*)/); // 受付番号
console.log('%s', order_id);
var product_id = message_body.match(/[ 品番 ] (.*)/); // 品番
console.log('%s', product_id);
var product_name = message_body.match(/[ 商品名 ] (.*)/); // 商品名
console.log('%s', product_name);
var pcs = message_body.match(/[ 注文点数 ] (.*)/); // 注文点数
console.log('%s', pcs);
var price = message_body.match(/[ 注文単価 ] (.*)/); // 注文単価
console.log('%s', price);
sheet.getRange("a"+lastRow).setValue(order_id);
sheet.getRange("b"+lastRow).setValue(product_id);
sheet.getRange("c"+lastRow).setValue(product_name);
sheet.getRange("d"+lastRow).setValue(pcs);
sheet.getRange("e"+lastRow).setValue(price);
}
}
}
}
自分で試したこと
matchのワードはメールからコピーしています。半角スペースの正規表現を入れてみたりしましたが、ダメでした。
var order_id = message_body.match(/受付番号(.*)/); // 受付番号
にすると
order_id:Array(2)
0: "受付番号 ] AAAAAA"
1: " ] AAAAA"
を返します。