簡體   English   中英

從Google雲端硬盤上的CSV文件復制和替換/插入大量數據到SpreadSheet

[英]Copy & replace/insert loads of data from CSV file located on Google Drive to SpreadSheet

我從另一項服務中獲取數據到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"); } }; 

我猜想如果您的腳本正在處理那么多行,那么它可能會超時。 您可以做一些優化代碼的事情:

  • 將CSVToArray()替換為內置的Utilities.parseCsv()函數。
  • 將getRange()。setValues()移出循環,將所有內容寫入數組,然后在一次調用中將其寫入工作表。
  • 如果仍然太慢,請查看連續批處理庫 ,這將使您將處理分成較小的塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM