复制&将位于Google云端硬盘上的CSV文件中的大量数据替换/插入到SpreadSheet

时间:2016-11-07 09:44:08

标签: csv google-apps-script

我将其他服务的数据提取到Google云端硬盘。其格式为CSV,并保存在Google云端硬盘上的.csv中。每个文件的大小约为5MB和> 17K行!我尝试使用导入脚本,但它没有工作,它适用于较小的文件,但我只是想将整个csv复制到我的电子表格而不关心旧数据。



function import() {
   var fSource = DriveApp.getFolderById("****"); // reports_folder_id = id of folder where csv reports are saved
  var fi = fSource.getFilesByName('report.csv'); // latest report file
  var ss = SpreadsheetApp.openById("***"); // data_sheet_id = id of spreadsheet that holds the data to be updated with new report data
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
  if ( fi.hasNext() ) { // proceed if "report.csv" file exists in the reports folder
    var file = fi.next();
    var csv = file.getBlob().getDataAsString();
    var csvData = CSVToArray(csv); // see below for CSVToArray function
        for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
      sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
    }
    /*
    ** report data is now in 'NEWDATA' sheet in the spreadsheet - process it as needed,
    ** then delete 'NEWDATA' sheet using ss.deleteSheet(newsheet)
    */
    // rename the report.csv file so it is not processed on next scheduled run
   // file.setName("report-"+(new Date().toString())+".csv");
  }
};
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

如果处理那么多行,我猜你的脚本可能会超时。您可以采取一些措施来优化代码:

  • 使用内置的Utilities.parseCsv()函数替换CSVToArray()。
  • 将getRange()。setValues()移出循环,将所有内容写入数组,然后在一次调用中将其写入工作表。
  • 如果它仍然太慢,请查看Continuous Batch Library,这样您就可以将处理分解成更小的块