LoginSignup
0
1

More than 1 year has passed since last update.

[GAS] Gmailの特定の文字以降を取得しスプレッドシートへ貼付け

Last updated at Posted at 2021-11-22

今回は、Gmailで受信したメールの特定の件名と文字を検索して、スプレッドシートに書き出し、AVERAGE関数/フィルタを設定するまでやってみました。
(ピボットとグラフは手作業で設定。)

完成イメージ:
0301.gif

画像のような感じで、自分宛に4通メールを送って、それを下のコードで実行してみてください。

0301.jfif

サンプルメールのコピペは以下からどうぞ。。

Gmail件名
0301件名抽出だよ004
Gmail本文
顧客名:D社

製品満足度:9

価格満足度:5

お客様の声:品質はいいですが、
高いです。

担当者:
鈴木

GASのコードは以下です。

AppsScriptコード
function getGmail2() {
  SpreadsheetApp.getActiveSheet().getRange("A4:F504").clear({ contentsOnly: true, formatOnly: false })
  SpreadsheetApp.getActiveSheet().getRange('D4').activate();
  SpreadsheetApp.getActiveSheet().getRange(1, 4).setValue("Average");
  SpreadsheetApp.getActiveSheet().getRange(1, 5).setValue("Average");
  SpreadsheetApp.getActiveSheet().getRange(2, 4).setFormula('=AVERAGE(D4:D)');
  SpreadsheetApp.getActiveSheet().getRange(2, 5).setFormula('=AVERAGE(E4:E)');


  SpreadsheetApp.getActiveSheet().getRange('D1:E2').setHorizontalAlignment('center');

  SpreadsheetApp.getActiveSheet().getRange("A3:F3").getFilter().remove();
  SpreadsheetApp.getActiveSheet().getRange("A3:F3").createFilter();

  //件名に、「件名抽出だよ」を含むメールを500件検索。501件以上はエラーになる。
  var kenmeiSu = GmailApp.search("件名抽出だよ", 0, 500);
  var honbunSu = GmailApp.getMessagesForThreads(kenmeiSu);
  var gyo = 4;

  for (var i = 0; i < honbunSu.length; i++) {
    for (var j = 0; j < honbunSu[i].length; j++) {
      //getDate()だけだと年月日に加えて時間も入るので、
      //後ろに.to.toLocaleDateString()を付けると年月日だけ表示される。
      var retsuA = kenmeiSu[i].getMessages()[j].getDate().toLocaleDateString();

      var hipparu = honbunSu[i][j].getPlainBody();

      //「顧客名:」と同じ列の「顧客名:」以降の文字を取得
      var kokyaku = new RegExp('顧客名:' + '.*?' + '\r');
      var retsuC = hipparu.match(kokyaku)[0].replace('顧客名:', '').replace('\r', '');

      //「製品満足度:」と同じ列の「製品満足度:」以降の文字を取得
      var seihin = new RegExp('製品満足度:' + '.*?' + '\r');
      var retsuD = hipparu.match(seihin)[0].replace('製品満足度:', '').replace('\r', '');

      //「価格満足度:」と同じ列の「価格満足度:」以降の文字を取得
      var kakaku = new RegExp('価格満足度:' + '.*?' + '\r');
      var retsuE = hipparu.match(kakaku)[0].replace('価格満足度:', '').replace('\r', '');

      //「お客様の声:」から「担当者:」までの複数行間の文字を取得
      var koe = new RegExp('お客様の声:' + '[\\s\\S]*?' + '担当者:');
      var retsuF = hipparu.match(koe)[0].replace('お客様の声:', '').replace('担当者:', '').replace('\r', '');

      //「担当者:」一段下の行の文字を取得
      var tanto = new RegExp('担当者:' + '[\\s\\S]*' + '\r');
      var retsuB = hipparu.match(tanto)[0].replace('担当者:', '');

      SpreadsheetApp.getActiveSheet().getRange(gyo, 1).setValue([retsuA]);
      SpreadsheetApp.getActiveSheet().getRange(gyo, 2).setValue([retsuB]);
      SpreadsheetApp.getActiveSheet().getRange(gyo, 3).setValue([retsuC]);
      SpreadsheetApp.getActiveSheet().getRange(gyo, 4).setValue([retsuD]);
      SpreadsheetApp.getActiveSheet().getRange(gyo, 5).setValue([retsuE]);
      SpreadsheetApp.getActiveSheet().getRange(gyo, 6).setValue([retsuF]);
      gyo++;
      SpreadsheetApp.getActiveSheet().getRange(3, 1).setValue("受信日");
      SpreadsheetApp.getActiveSheet().getRange(3, 2).setValue("担当者");
      SpreadsheetApp.getActiveSheet().getRange(3, 3).setValue("顧客名");
      SpreadsheetApp.getActiveSheet().getRange(3, 4).setValue("製品CS");
      SpreadsheetApp.getActiveSheet().getRange(3, 5).setValue("価格CS");
      SpreadsheetApp.getActiveSheet().getRange(3, 6).setValue("お客様の声");
    }
  }
}

なかなかおもしろくなってきました、GAS&JS🎵

正規表現で取り出します。 ・同じ行にある文字の取得:'特定文字' + '.*?' + '\r'  ・一段下の行の文字を取得:'特定文字' + '[\\s\\S]*' + '\r' ・複数行間の文字の取得:'開始文字' + '[\\s\\S]*?' + '終了文字'

参考にしたサイト:

0
1
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
1