0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Gmailで検索した内容をスプレッドシートにまとめる!(GAS)

Posted at

本日の内容

  • Gmail検索をして件名(シート名に設定)ごとにスプレッドシートにまとめる処理をGASで作成。
  • 前回の記事でGoogleドライブから全てのtxtを検索し、スプレッドシートに出力するスクリプトを作成したので、内容は類似。

作成したソース

// Gmail内にある検索条件に一致するメールの本文をスプレッドシートのシートごとに書き込むメソッド
function searchGmailMakeSpreadSheet() {

  // 取得したメールの件数のインデックス
  var num = 0;

  // シート名
  var sheetName = "";

  // sampleフォルダー配下にスプレッドシート"gmail"を作成
  var newSheet = createSpreadsheet("1_fD_XDbrDIFDrdgn_dRbFRChEdQ1tFqF", "gmail");

  // 作成したスプレッドシートのIDを取得
  var sheetId = newSheet.getId();

  // ID指定をしてスプレッドシートを開く
  var newSpreadSheet = SpreadsheetApp.openById(sheetId);

  // 検索条件に該当するスレッド一覧を取得(キーワード:出前館、件数:3件に設定)
  var threads = GmailApp.search("出前館", 0, 3);

  // 条件に該当するメッセージスレッドを取得
  var messagesForThreads = GmailApp.getMessagesForThreads(threads);

  // スレッドを一つずつ取り出す
  threads.forEach(function(thread) {
    
    // メールの件名を取得
    var subject = messagesForThreads[num][0].getSubject();

    // 取得したメールの1件目から1つずつ増やしていく
    num++;

    // 件名をシート名に設定
    newSpreadSheet.insertSheet(subject);
    
    // デフォルトで作成されている「シート1」を取得
    var delSheet = newSpreadSheet.getSheetByName("シート1");
    
    // デフォルトシートを削除
    if (delSheet != null) {
      newSpreadSheet.deleteSheet(delSheet);
      }
      
    // スレッド内のメール一覧を取得
    var messages = thread.getMessages();
    
    // メールを一つずつ取り出す
    messages.forEach(function(message) {

      // メール本文を取得
      var plainBody = message.getPlainBody();

      // メール本文が取得できているかログに出力して確認
      Logger.log(plainBody);

      // 改行単位でカンマ区切りにする(配列のイメージ)
      var txtLines = plainBody.split(/[\s]+/);

      // 配列の全ての要素に対してスプレッドシートに書き込み処理を行う
      Array.from(txtLines, x => outputLog(x, newSpreadSheet));
    });
  });
}

// スプレッドシートに出力するメソッド
function outputLog(txt, newSpreadSheet) {

  // txtが存在するとき書き込む
  if (txt != null) {
    newSpreadSheet.appendRow([txt]);
  }
}

// フォルダに新規にスプレッドシートを作成(第1引数:フォルダID, 第2引数:ファイル名)するメソッド
function createSpreadsheet(folderID, fileName) {

  // フォルダIDから該当フォルダを取得
  var folder = DriveApp.getFolderById(folderID);

  // スプレッドシートを指定されたファイル名で作成
  var newSpreadSheet = SpreadsheetApp.create(fileName);

  // IDを指定してファイルを取得
  var file = DriveApp.getFileById(newSpreadSheet.getId());

  // オリジナルのファイルで書き込みを行うと、想定通りにいかないのでコピーを作成
  var copiedFile = file.makeCopy(fileName, folder);

  // コピー元のファイルを削除
  file.setTrashed(true);

  // コピーしたファイルを返す
  return copiedFile;
}
  • Googleドライブ内に「samplefolderフォルダ」を作成。
  • samplefolder配下に「gmail」という名前でスプレッドシートを新規作成。
  • Gmailから検索条件に合致する内容のメールの一覧を抜き出し、スプレッドシートに内容を入力完了させる。
  • シート名は件名にしている。
  • 確認用に本文内容はログに出力する。

実行イメージ

image.png
image.png

  • 出力にかかった時間は検索ワード「出前館」、出力件数3で35秒程度。

出力したスプレッドシート

image.png

課題点

  • GASではスクリプトの実行時間が6分という縛りがあるらしいので、全件検索や検索件数を一定数増やしたい場合には対応できないと考えられる。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?