在Gmail中

时间:2015-11-28 16:46:55

标签: python google-app-engine csv google-api google-api-python-client

我收到一些电子邮件到我的Gmail帐户,其中包含带有数字数据的CSV文件。

CSV格式相同,每天使用SendGrid发送。

我必须在iPython中手动整理和处理CSV文件并生成汇总计算。

我可以部署一个简单的Google脚本,它会自动将这些CSV文件保存到我的Google云端硬盘中,以便我可以运行批处理脚本来立即处理它们吗?

我对Python和脚本编程比较熟悉,但我似乎无法在Google Scripts上找到任何基本教程。

提前致谢。

我找到了这个 Retrieve csv attachment file from gmail and place the data in a google spreadsheet

这个 Trigger Google Apps Script by email

但希望有一个好的,易于学习的教程。

1 个答案:

答案 0 :(得分:0)

好的,这比我想象的要简单得多

  var targetFile = "1**************vr4PchIo1wcpTEQU"; //               Output file
 var targetSheet = "booking_weekly";  // output sheet


function Main() {
  /Different reports and client abbreviations 
  reportname = '_booking_weekly'

     clientnames = ['OO','TP','TG',]

      for(var i = 0;i <clientnames.length;i++){
           clientname = clientnames[i]

    /Set the search string up
        searchstring = 'subject:' + clientname + reportname
        var searchedThreads = GmailApp.search( searchstring)[0];
        var id = searchedThreads.getId(); 
        var attachtextLength = GmailApp.getMessageById(id).getAttachments()[0].getDataAsString().length;
        if (attachtextLength <= 2000){
            var attachtext = GmailApp.getMessageById(id).getAttachments()[0].getDataAsString();
            UpdateSheet(attachtext,clientname,reportname);
           }
        }

}


function UpdateSheet(dataString,client,report) {
      //ommited CSVTo Array function as it is in the Tutorials
  var dataArray = CSVToArray(dataString);
  var myFile = SpreadsheetApp.openById(targetFile);
  var mySheet = myFile.getSheetByName(targetSheet);
  var lastRowValue = mySheet.getLastRow();
  for (var i = 0; i < dataArray.length; i++) {
        mySheet.getRange(i+lastRowValue+1, 3, 1,     dataArray[i].length).setValues(new Array(dataArray[i]));
  //Pass client name to sheet            
  mySheet.getRange(i+lastRowValue+1, 1, 1, 1).setValue([client]);

   //Passs reportname to sheet
   mySheet.getRange(i+lastRowValue+1, 2, 1, 1).setValue([report]);
  }
   mySheet.deleteRows(lastRowValue+1)
}