Gmailとスプレッドシートの連携で特定文字以降を書き出す方法を教えてください

501 views
Skip to first unread message

ベッツ

unread,
Dec 19, 2016, 3:22:08 PM12/19/16
to Google Apps API Japan
皆さま初めまして。
この度Gmailとスプレッドシートを連携して特定文字以降の文字を抜き出して、スプレッドシートに書き込みたいです。

調べながら形にはなっていってるのですが、[.slice] [.split]でやるとうまくいきません、、、
何かいい方法を教えて頂けると助かります。

抜き出したい情報は以下のです。


[ 苗字 ] 山田
[ 名前 ] 太郎
[ メールアドレス ] 123456789@gmail.com
[ 電話番号 ] 0901234-5678
[ 登録国 ] 日本


山田 太郎
123456789@gmail.com
0901234-5678
 日本

このようにセルに書き出したいです。




function fetchContactMail() {
 
  /* Gmailから特定条件のスレッドを検索しメールを取り出す */
  var strTerms = '(is:unread "")';
  var myThreads = GmailApp.search(strTerms, 0, 500); //条件にマッチしたスレッドを取得、最大500通と決まっている
  var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納
 
  var valMsgs = [];
 
  /* 各メールから日時、送信元、件名、内容を取り出す*/
  for(var i = 0;i < myMsgs.length;i++){
 
    valMsgs[i] = [];
    
    valMsgs[i][2] = myMsgs[i][0].getPlainBody()//3列目に名前
      .replace(' ','')
      .replace('<br />','')
      .replace('\n','')
     .split("─");
    
    valMsgs[i][3] = myMsgs[i][0].getTo();//4列目にアドレス
    
    valMsgs[i][4] = myMsgs[i][0].getBody()//5目に性別
      .split("性")
     .slice(-1)
    
    //valMsgs[i][7] = myMsgs[i][0].getDate();//8列目に日付
     
    
    
    myMsgs[i][0].markRead(); //メッセージを既読にする
 
  }
 
  /* スプレッドシートに出力 */
  if(myMsgs.length>0){
    
    var mySheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ステータス'); //シートを取得
    var maxRow=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得
    mySheet.getRange(maxRow+1, 1, i, 8).setValues(valMsgs); //シートに取得したメッセージのデータを追加
 
  }
}

松本裕史

unread,
Dec 19, 2016, 11:33:19 PM12/19/16
to Google Apps API Japan
もっといい方法はあると思いますが適当にやれば、こんな感じでやれば出来るかと。


function myFunction() {
  //これメールと仮定
  var msg = "[ 苗字 ] 山田\n[ 名前 ] 太郎\n[ メールアドレス ] 1234...@gmail.com\n[ 電話番号 ] 0901234-5678\n[ 登録国 ] 日本";
  //メール本文を改行で分けて配列に
  var array = msg.split("\n");
  //抜き出したいデータの連想配列
  var data = {'[ 苗字 ] ':'', '[ 名前 ] ':'', '[ メールアドレス ] ':'', '[ 電話番号 ]':'', '[ 登録国 ] ':''};
  
  for (key in data){
    for (var i = 0; i < array.length; i++){
      //分解したメールの本文にkeyの文字列が含まれてたら処理を行う
      if (array[i].indexOf(key) != -1){
        //連想配列にデータを入れる
        data[key] = array[i].replace(key, '');
        Logger.log(data[key]);
      }
    }
  }
}


2016年12月20日火曜日 5時22分08秒 UTC+9 ベッツ:
Reply all
Reply to author
Forward
0 new messages