如何导入超过2k行的.csv文件

时间:2018-11-21 00:17:50

标签: google-apps-script google-sheets

我真的需要帮助。这是一种情况。每个星期一,我的Gmail Accout都会收到一个.csv文件。通常,它是> 3k行,并且基本上包含数字数据。

到目前为止,我正在下载此.csv文件并将其复制/粘贴到Google表格中。现在,我要自动执行此任务。

我已经搜索了互联网,并找到了用于Google表格的漂亮脚本:

function getCSV() {
  // Abrir a planhilha e limpar ela
  var sheetID = SpreadsheetApp.getActiveSpreadsheet().getId();
var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = SpreadsheetApp.openById(sheetID);
  var first = ss.getSheetByName("Agrupados_por_plano");
  first.clearContents();
  // 

 var myLabel = GmailApp.getUserLabelByName("Pulse MetaBase"); // specify label in gmail
 var threads = myLabel.getThreads(0,1);
 var msgs = GmailApp.getMessagesForThreads(threads);
 var attachments = msgs[0][0].getAttachments();
  //var content = attachments.getContentType();
  Logger.log(attachments[0].getSize());
 // 

 var csv =  attachments[0].getBlob().getDataAsString();


 var data = Utilities.parseCsv(csv);

var a = data.length ;
var b = data[0].length; 


  var range = first.getRange(1,1,data.length,data[0].length);
range.setValues(data);



}

该脚本确实运行良好,并且没有错误。但是它仅导入前2000行数据。例如,我有一个包含2780行和5列的文件。我仅使用脚本导入2000行和5列,原始文件大小(250 KB)减小为192 KB。

我该如何解决?它是getAttachment()方法的限制吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。这就是关注您正在处理的代码。我的脚本一遍又一遍地得到相同的消息,并且该特定消息包含带有完全2000行数据的.csv附加消息。那我怎么办?只需添加几行代码,即可在每次触发脚本时获取线程中的最后一条消息。

function getThreadsGmail()
{
  // pegar o último email do thread e retornar arquivo anexo
  var myLabel = GmailApp.getUserLabelByName("Meta_Base_Reports"); // especificar lable em Gmail
 var threads = myLabel.getThreads();
 
  
   var msgs = threads[0].getMessages();
  var lastMsg = msgs[msgs.length - 1]; // get the last message in the thread
  var attachments = lastMsg.getAttachments();
  return attachments;
}

谢谢你们! =)