前回に引き続き、Google Apps Scriptのお勉強です。
今回は、Gmailの内容を取得してスプレッドシートに記録する、記録を定期的に行う、そして記録した内容を可視化するところまでやりました。
Udemyの講座を元にお勉強しています。
私が受講したUdemyの講座
「Google Apps Scriptの仕事効率化・自動化をプログラミングで実現」という講座のセクション8:[自動化④]問い合わせ数の自動集計の内容です。
今回学んだ内容
メールを加工して可視化する、色々な処理で使えそうな内容です。
1.Gmailからメールを取得
↓
2.スプレッドシートに記録
↓
3.定期的に実行する
↓
4.データを集計・可視化
Gmailからメールを取得してスプレッドシートに記録
1.特定の文字をキーにGmailから検索結果を取得します。
2.後の判定に必要なスプレッドシートの情報を取得します。
(取得済メールのメッセージID、最終行)
3.取得したGmailの内容は配列になっているのでループ処理で取り出しつつ、必要な情報のみを取り出して、スプレッドシートに記録するための配列に格納します。
4.スプレッドシートに記録します。
以下が私が作ったサンプルコードです↓
function getMeruUri() {
//メールを取得
var searchText = "【メルカリ】取引が完了しました";
var start = 0;
var max = 100;
var threads = GmailApp.search(searchText, start, max);
var messages = GmailApp.getMessagesForThreads(threads);
//スプレッドシートを取得
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var idArrays = sheet.getRange(`E2:E${lastRow}`).getValues();
var flatenArray = idArrays.flat();
//メールの内容を加工して、スプレッドシートに記録するための配列に格納
var arrays = [];
for(var i = 0; i < messages.length; i++){
for(var j = 0; j < messages[i].length; j++){
var msgId = messages[i][j].getId();
//メッセージIDで判断して新たなメールのみ処理する
if(flatenArray.includes(msgId) == false){
var row = [
messages[i][j].getDate(),
messages[i][j].getPlainBody().split("商品ID : ")[1].split("\n")[0],
messages[i][j].getPlainBody().split("商品名 : ")[1].split("\n")[0],
messages[i][j].getPlainBody().split("商品価格 : ")[1].split("円")[0],
msgId
];
arrays.push(row);
}
}
}
//スプレッドシートに記録
if(arrays.length > 0){
SpreadsheetApp.getActiveSheet().getRange(`A${lastRow + 1}:E${lastRow + arrays.length}`).setValues(arrays);
}
}
★難しポイント★
スプレッドシートへの記録は、「どの範囲に記録するかを指定する必要がある」というところが難しいと感じました。
スプレッドシートの「最終行+1行目」から「最終行+取得した件数行目」までの範囲といった指定をする部分ですね。慣れれば簡単に感じるようになるでしょうが。
定期的にGASを実行する
これはノーコードなので簡単でした。
時計マークをポチっと押します。
定期的に実行したかったら「時間主導型」を選択して、「日付ベースのタイマー」などで頻度を選んで保存すればOKです。
これで、先ほど作成したGASが定期的に実行され、検索条件に合致する新着メールがあればスプレッドシートに記録してくれるわけです。
スプレッドシートに記録したデータを集計・可視化
新規データが追加された際に自動的にデータを更新するためには、Query関数というものを使います。スプレッドシートで使えるSQL文の様なものです。
スプレッドシートのセルに 「=query(・・・)」という感じに記述することで、Query関数が使えて、データをSQLチックに集計することができます。
以下のように、日付別の売上げ金額を集計するようなSQLを実行できます。
Query関数でスプレッドシートの内容を自動集計するようにできていれば、それを元に作成するグラフも自動的に更新されます。
列を選択してグラフを挿入すれば、商品の売上高のグラフが作成でき、新着メールが来れば(売上げがあれば)自動的に更新されていく仕組みの完成です。
メルカリ売り上げの自動集計を作ってみた
上でもちょっと紹介していますが、今回の内容を元にメルカリ売り上げをスプレッドシートに自動集計する処理を作ってみました。
メルカリで取引が完了すると、以下のような売上金額が記載されたメールが届きます。
このメールをスプレッドシートに集計するものです。
これをスプレッドシートに記録すると以下のような感じにできます。
メールに販売手数料や配達料も記載されていれば、色々取れるのですが…
まあ、お勉強の一環ということで今のところはこれで我慢しましょう。
まとめ
1.GASを使ってGmailの内容を取得・加工してスプレッドシートに記録することを学びました。
2.スプレッドシートに記録した内容は、Query関数を使って最新の状態に更新するという手法も学べました。
3.自分が現実に受信しているメールを集計する処理を作ってみて、まあまあ使えるという感触を得ました。色々と応用が利きそうです。
コメント