Проблема импорта большого файла .csv в Google Sheets - PullRequest
0 голосов
/ 10 июля 2019

Я разработал панель инструментов в Google DataStudio на основе одного файла GoogleSheets.Данные, которые попадают в файл GoogleSheets, поступают из двух файлов .csv, разделенных символом «;».Эти CSV-файлы автоматически обновляются ночью и сохраняются в GoogleDrive.Для того, чтобы моя DashBoard также автоматически обновлялась на основе изменений в файлах .csv, мне нужно автоматически считывать их в файл GoogleSheets, что я делаю, вызывая запуск сценария каждую ночь после обновления .csvs ...

Поскольку я действительно не знаю, как кодировать, кроме некоторых основ, я создаю следующий скрипт из различных источников в Интернете.Приятно то, что он в основном работает:

function parseCsv(csvString, delimiter) {
  var sanitizedString = csvString.replace(/(["'])(?:(?=(\\?))\2[\s\S])*?\1/g, function(e){return e.replace(/\r?\n|\r/g, ' ') });
  return Utilities.parseCsv(sanitizedString, delimiter)
}

//------------------------------------------------------------

function import_Sales() {                    
 var fileName = "exported_Sales.csv";

 var searchTerm = "title = '"+fileName+"'";
 var files = DriveApp.searchFiles(searchTerm)
 var csvFile = "";

 while (files.hasNext()) {
   var file = files.next();

   if (file.getName() == fileName) {
     csvFile = file.getBlob().getDataAsString('ISO-8859-15');
     break;
   }
 }

 var csvData = parseCsv(csvFile,";");
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('ExportSales');
 sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}

Как уже упоминалось, я импортирую 2 разных файла .csv (поэтому есть не только функция import_sales, но и функция import_stock.

Для стокового csv все работает очень хорошо (похоже, что функция import_Sales () выше, кроме названий, конечно, выше).

Проблема, похоже, в размере моего файла sales-.csv. (23 столбца x 56.000 строк), и файл обновляется каждую ночь, когда обновляется, поэтому при попытке запустить функцию import_Sales через несколько минут я получаю сообщение об ошибке «максимальное время выполнения» ... Итак, я понимаю, что это должно иметьчто-то делать с размером .csv или функцией (будем надеяться) неэффективной, и, возможно, кто-то из вас имеет представление о том, как он может работать быстрее? Размер CSV не может быть изменен, и я не могу себе представить, что этобудет невозможно импортировать его в Google Sheets?!

Кто-нибудь знает, как я могу управлять им, чтобы получить данные изCSV в Google листы автоматически каждую ночь?Может быть, я мог бы пропустить строку, которая уже находится в файле листов Google и просто импортировать новые строки из CVS как-то?Но на этом мои знания определенно заканчиваются, поэтому я был бы рад, если бы вы, ребята, смогли мне помочь!

спасибо и поздравления!

1 Ответ

0 голосов
/ 10 июля 2019

Если он уже находится на вашем диске, попробуйте скопировать файл CSV и преобразовать его в листы, а не «вручную» переводить ячейки из csv в существующий лист.

function main(){

    var files = DriveApp.searchFiles('title contains "your csv file name"').next();

    var name = files.getName();
    var file_id = files.getId();
    var file_Blob = files.getBlob();
    var newFile = { title : name+'_Sheet',
                 key : file_id};
    files = Drive.Files.insert(newFile,file_Blob, {convert: true});
}

Я также прилагаю документацию для сроков выполнения функции.

...