LoginSignup
1
2

More than 3 years have passed since last update.

【GAS】Gmailからデータ取得し、スプレッドシートに書き込むポイント

Posted at

前回投稿した、
【GAS】検索したメール本文の特定部分をスプレッドシートに書き込む
の振り返り、整理回です。

ポイント

  1. メールの処理
  2. 正規表現
  3. スプレッドシートに登録

以下、各々の説明です。

1. メールの処理

1. メール検索

Gmail使っていて、メールを検索するのと同じ。
返却値がスレッドの塊というのが肝。

  // メール検索条件。処理済みのメールは除外。
  let query = 'subject:(検索したい件名 -label:済み';

2. メール検索結果(スレッド単位)から、メッセージの処理

「スレッドの塊 > スレッド > メッセージ」のイメージが大事。
以下のように、1つずつ分解して処理します。

GmailApp.search()で、スレッドの塊を取得
  // メール検索
  let threads = GmailApp.search(query);
スレッドの塊から、1スレッドずつ処理
  // 1スレッドずつ処理 
  threads.forEach(function (thread) {
1スレッドから、1メッセージずつ処理
    // 1メッセージずつ処理
    thread.getMessages().forEach(function (message) {
      let subject = message.getSubject();
      let body = message.getBody();

2. 正規表現

1. 設定の仕方

まずは、プレーン形式でメール本文取得。
その中から、取得したい部分を取得。

      // 正規表現で処理するためHTML形式ではないプレーンな型の本文を取得
      var plainBody = message.getPlainBody();

      // 正規表現で取得したい箇所を取得
      let ringiAppNo = plainBody.match(/申請番号: (.*)/);
      let ringiSubject = plainBody.match(/件名:(.*)/);

2. 戻り値

正規表現の戻り値から取得したい部分をチョイス。

  • 戻り値
    • 0 : マッチした文字列全体が入る
    • 1~ : それぞれのキャプチャ
    • index : マッチした場所 (bite値 じゃなくて 0から数えて何番目の文字か?)
    • input : 検索される側の文字列
      // 結果を入れる配列に格納
      items.push([
        ringiAppNo[1],
        ringiSubject[1]
      ]);

3. スプレッドシートに登録

1. itemsに格納

配列の型にして、itemsに登録

      // 結果を入れる配列に格納
      items.push([
        ringiAppNo[1],
        ringiSubject[1]
      ]);

2. setValuesで値登録

書き込む範囲のセルを取得し、setValuesで値登録。

    let sheet = SpreadsheetApp.getActive().getSheetByName('書き込みしたいシート名');
    let row = 2;
    let column = 1;
    let numRows = items.length; // 配列数 = 行数
    let numColumns = items[0].length; // 配列の要素数 = カラム数
    sheet.getRange(row, column, numRows, numColumns).setValues(items);  
1
2
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
1
2