Использование Google Apps Script для копирования данных файла .CSV в Google Sheets - PullRequest
0 голосов
/ 01 февраля 2020

Мне нужно l oop через каждый файл .CSV в исходной папке и скопировать данные из каждого файла на новый лист / вкладку в одном файле Google Sheets. Я нашел пару ответов, связанных с этим topi c, но я получаю ошибки с обоими наборами кодов. Вот код, из которого я пытаюсь построить решение:

function appendCSV() {  
    var file = DriveApp.getFilesByName("myCSVFile.csv").next(); 
    var csvData = Utilities.parseCsv(file.getBlob().getDataAsString()); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var lastRow=sheet.getLastRow(); 
    sheet.getRange(lastRow, 1, csvData.length, csvData[0].length).setValues(csvData);
}

Вот первая ошибка, которую я получаю:

Невозможно получить следующий объект: итератор достиг конца (строка 2, файл "Код")

Я могу удалить метод .next() из строки 2, а затем я получаю еще одну ошибку:

TypeError: Не удается найти функцию getBlob в объекте FileIterator. (строка 3, файл "Код")

Кто-нибудь может определить, что здесь может пойти не так?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2020

Вам необходимо указать идентификатор таблицы и идентификатор папки. Также вы можете с помощью sh изменить названия листов созданных листов / вкладок.

function loadCSVFilesIntoSheets() { 
  var ss=SpreadsheetApp.openById('SpreadsheetId')
  var folder=DriveApp.getFolderById('folderId');
  var files=folder.getFilesByType(MimeType.CSV);
  while(files.hasNext()) {
    var file=files.next();
    var vA=Utilities.parseCsv(file.getBlob().getDataAsString());
    var ts=Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"MM/dd/yy HH:mm:ss")
    var sh=ss.insertSheet(file.getName()+'-'+ts);
    sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
  }
}

Получение идентификатора электронной таблицы: https://docs.google.com/spreadsheets/d/SpreadsheetIdHere/edit#gid=1655026329

Идентификатор папки: https://drive.google.com/drive/folders/folder id here

DriveApp

Utilities.parseCsv ()

Utilities.formatDate ()

1 голос
/ 02 февраля 2020

Первая полученная ошибка

Невозможно получить следующий объект: итератор достиг конца. (строка 2, файл "Код")

происходит потому, что, очевидно, не существует файла с именем myCSVFile.csv

var file = DriveApp.getFilesByName("myCSVFile.csv").next();

Вторая ошибка возникает по той же причине.

Во-первых, вы должны дважды проверить правильность имени файла и принадлежность этого файла той же учетной записи, которая использовалась для запуска скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...