みなさん、こんにちは!
現役エンジニアの”よし”です。
前回はGoogle Apps Scriptを使って、Gmailのメールの内容を取得する方法を紹介しました。
今回は取得した内容をスプレッドシートに表示するところを紹介していきます。
今回ももちろん、Googleが提供する公式ドキュメントに書いてありますが、
さらに分かりやすく、探す手間も省いて説明していきますね!
前回の記事はこちら
復習
前回の記事ではGmailで内容を取得する方法を紹介しました。
コードは以下です。このまま貼り付けることができます。
function myFunction() {
// メール(スレッド)取得①
let mailThreads = GmailApp.search('to:mail@test.co.jp');
Logger.log(mailThreads);
// スレッドからメールを取得する②
let threads = GmailApp.getMessagesForThreads(mailThreads);
Logger.log(threads);
// スレッドごとに内容を取得する
threads.forEach(function (thread) {
// メッセージ内容を取得
thread.forEach(function (message){
// 送信日時
let date = message.getDate();
Logger.log(date);
// 宛先
let to = message.getTo();
Logger.log(to);
// 送信者
let from = message.getFrom();
Logger.log(from);
// 件名
let subject = message.getSubject();
Logger.log(subject);
// メール内容
let body = message.getPlainBody();
Logger.log(body);
});
});
}
Logger.log()は確認のために入れていますが、確認必要ない!という方は削除して問題ございません。
①スプレッドシートにデータをセットするsetValues()
スプレッドシートにデータをセットする方法はいくつかあります。
今回紹介する方法は一括でデータをセットできる方法です。
まとめてデータをセットしたい時は便利なので、ぜひ使ってみてください!
まずは、以下を用意しましょう。
- セットしたいシートを取得
- シートの一番上に表示する項目を用意する(配列)
- スプレッドシートに一括でセットするための空の配列を用意する
// シート
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
// 項目名
let header = ["送信日時","宛先","送信者","件名","メール内容"];
// スプレッドシートに一括でセットするためのからの配列を用意する
let messages = [];
スプレッドシートに一括でデータをセットする場合、「二次元配列」でデータを用意する必要があります。
2次元配列は、配列の中に配列を作るイメージです。
今回でいくと、messages
の中にセットするデータを詰めていきます。
②2次元配列にデータをセットしていく
2次元配列にデータをセットしていきましょう。
- ヘッダー(項目)を空の配列に詰める
- メール1個1個を配列に詰めていく
まずは空の配列messages
に項目header
を詰めます。
messages.push(header);
Logger.log(messages);
messagesの中身をLogger.log()で確認すると、配列の中に、配列が用意できていることがわかります!
次に、メールの内容をmessages
に詰めていきましょう!
前回までで用意したコードに以下を追記します。
messages.push([date, to, from, subject, body]);
完成形はこちらです。
function myFunction() {
// メール(スレッド)取得①
let mailThreads = GmailApp.search('to:mail@test.co.jp');
// スレッドからメールを取得する②
let threads = GmailApp.getMessagesForThreads(mailThreads);
// スレッドごとに内容を取得する
threads.forEach(function (thread) {
// メッセージ内容を取得
thread.forEach(function (message){
// 送信日時
let date = message.getDate();
// 宛先
let to = message.getTo();
// 送信者
let from = message.getFrom();
// 件名
let subject = message.getSubject();
// メール内容
let body = message.getPlainBody();
// 挿入用に配列にプッシュ
messages.push([date, to, from, subject, body]);
Logger.log(messages);
});
});
}
Logger.log()で確認すると、しっかり配列に詰められていることがわかります!
③スプレッドシートにデータをセットする
いよいよ今まで用意してきたデータをスプレッドシートにセットします。
データをセットするには以下を使います。
sheet.getRange(1,1,messages.length,messages[0].length).setValues(messages);
getRange()
には、4つの項目を設定する必要があります。
getRange(開始行, 開始列, データ挿入行数, データ挿入列数
)
なので今回は、
getRange(1,1,messages.length,messages[0].length)
としています。
データ挿入行数
はmessages
の中身の個数(length)
データ挿入列数
はmessages
の要素番号1のデータの個数
で問題ないです。
以上を踏まえて、以下がコード全文です。
function myFunction() { // シート let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 項目名 let header = ["送信日時","宛先","送信者","件名","メール内容"]; // スプレッドシートに一括でセットするためのからの配列を用意する let messages = []; // メール(スレッド)取得① let mailThreads = GmailApp.search('to:mail@test.co.jp'); // スレッドからメールを取得する② let threads = GmailApp.getMessagesForThreads(mailThreads); // スレッドごとに内容を取得する threads.forEach(function (thread) { // メッセージ内容を取得 thread.forEach(function (message){ // 送信日時 let date = message.getDate(); // 宛先 let to = message.getTo(); // 送信者 let from = message.getFrom(); // 件名 let subject = message.getSubject(); // メール内容 let body = message.getPlainBody(); // 挿入用に配列にプッシュ messages.push([date, to, from, subject, body]); }); }); sheet.getRange(1,1,messages.length,messages[0].length).setValues(messages);
}
実際に実行してみましょう!
するとスプレッドシート「シート1」にデータがセットされているでしょう!
まとめ
いかがでしたでしょうか?しっかりデータはセットできたでしょうか?
データのセットが一括でできると、GASの実行時間も短く済みます。覚えていて損はないと思うので、これを機に試してみてはいかがでしょうか。
Google Workspaceを活用している場合はGoogle Apps Scriptを覚えると業務の効率化および自動化ができます。
Google Apps Scriptが学べるスクールはコチラで紹介しています。よかったら見てみてください。
Google Apps Scriptが学べたらコチラの記事で収益化してみてはいかがでしょうか?
以上、最後までお読みいただきありがとうございました。