2016-11-07 19 views
0

Googleドライブに別のサービスからデータを取得します。形式はCSVで、Googleドライブの.csvに保存されます。各ファイルのサイズは約5MB、> 17K行です。私は、インポートスクリプトを使用しようとしましたが、それは動作しませんでした、それは小さなファイルで動作しましたが、私は古いデータを気にせずに私のスプレッドシートにCSV全体をコピーしたいです。Googleドライブにある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"); 
 
    } 
 
};

+0

ラインは、それがで失敗しないこれは、それについてどのように動作しないのですか? CSVToArrayはどこですか? –

+0

CSVToArrayは私が含まなかった関数です。それは単にgoogleからのコピーです。 –

答えて

1

私はそれが多くの行を処理している場合、スクリプトはおそらくタイムアウトされて推測しています。

  • CSVToArray()を組み込みのUtilities.parseCsv()関数に置き換えます。コードを最適化するためにできることはほとんどありません。
  • ループからgetRange()。setValues()を移動し、すべてを配列に書き込み、それを1回の呼び出しでシートに書き出します。
  • それはContinuous Batch Libraryではまだ遅すぎる見ている場合は、より小さなチャンクに処理を分割することができます
+0

Utilities.parseCsv()はうまくいきました。あなたの提案Andrewに感謝します。 –

関連する問題