【问题标题】:Collate and perform calculations on daily CSV reports in gmail在 gmail 中对每日 CSV 报告进行整理和计算
【发布时间】:2015-11-28 16:46:55
【问题描述】:

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

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

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

我可以部署一个简单的 google 脚本,它会自动将这些 CSV 文件保存到我的 Google Drive,以便我可以运行一个批处理脚本来一次处理它们?

我对 Python 和脚本编写比较熟悉,但我似乎在 Google Scripts 上找不到任何关于这方面的基本教程。

提前致谢。

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

还有这个 Trigger Google Apps Script by email

但希望有一个很好且易于遵循的教程。

【问题讨论】:

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


    【解决方案1】:

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

      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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多