Я пишу скрипт для поиска самого последнего добавленного CSV-файла в папку на диске Google и добавления содержимого в последнюю строку «главного листа». К сожалению, имя CSV-файла не совпадает каждый раз, когда он помещается в папку на диске, поэтому все, на чем мне нужно основывать поиск, — это последний добавленный файл.
Я получаю сообщение об ошибке:
"Ошибка типа: не удается найти функцию hasNext в объекте Masergy Reports. (строка 7, файл "Код")"
Ценим любую помощь в решении этой проблемы.
function importData()
{
var ss = SpreadsheetApp.openById("1FldzyMKoQnbsqNxCYUZsizxVLShHrLBq_llJnu2so9o");
var folderID = (typeof(folderID) !== 'undefined')? folderID : '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';//default folderID
var fldr = DriveApp.getFolderById(folderID);
var files = fldr.getFilesByType('text/csv');
while (fldr.hasNext())
{
var file = files.next();
var filename = file.getFilesByType('text/csv');
if (fileType.match(files))
{
var csvstr=file.getBlob().getDataAsString();
var csvData=Utilities.parseCsv(csvstr);
var sheet = ss.getSheetByName("MasergyReports");
var lastrow = sheet.getLastRow();
sheet.getRange(lastrow + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
file.setName(filename.slice(0,-3) + 'old'); //the .old files won't pass the file re filter next time.
}
}
}
@sinaraheneba какие-нибудь советы о том, что мне нужно изменить в моем коде, чтобы он заработал?
Вы пытаетесь перебрать объект папки, а не файлы.





folderID кажется слишком сложной, зачем проверять, не определена ли она, когда вы определяете ее в этой строке?while.file.getFilesByType() не является допустимым методом.fileType не определен, но вы используете его в своем заявлении if.filename недействительна, то и ваше утверждение setName() тоже.if, чтобы проверить имена файлов на наличие шаблона «.old».Просто определите var folderID только с идентификатором, нет причин проверять, не определен ли он, потому что вы все равно его определяете:
var folderID = '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';
Вы должны перебирать свою переменную files, а не fldr:
while (files.hasNext())
Измените var fileName, чтобы фактически получить имя файла каждого файла:
var fileName = file.getName();
Измените оператор if, чтобы получить тип содержимого файла, вместо того, чтобы пытаться определить его в var filename. Также добавлена проверка имен файлов, оканчивающихся на «.old», чтобы убедиться, что мы обрабатываем только новые файлы:
if (file.getBlob().getContentType() === "text/csv" && !fileName.match(/.old/))
Вместо этого используйте наш новый var fileName в своем заявлении setName():
file.setName(fileName.slice(0,-3) + ".old");
function importData()
{
var ss = SpreadsheetApp.openById("1FldzyMKoQnbsqNxCYUZsizxVLShHrLBq_llJnu2so9o");
var folderID = '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';
var fldr = DriveApp.getFolderById(folderID);
var files = fldr.getFilesByType('text/csv');
while (files.hasNext())
{
var file = files.next();
var fileName = file.getName();
if (file.getBlob().getContentType() === "text/csv" && !fileName.match(/.old/))
{
var csvstr=file.getBlob().getDataAsString();
var csvData=Utilities.parseCsv(csvstr);
var sheet = ss.getSheetByName("MasergyReports");
var lastrow = sheet.getLastRow();
sheet.getRange(lastrow + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
file.setName(fileName.slice(0,-3) + "old"); //the .old files won't pass the file re filter next time.
}
}
}
blob.getContentType()file.getName()Спасибо @росс! Кажется, это работает, однако содержимое копируется из всех CSV-файлов в папке, а не только из самых последних. Нужно ли мне изменить сценарий, чтобы найти что-нибудь, что не помечено как «старое»?
Да — изменение последних 3 символов имени файла не изменит тип файла на Google Диске. Я добавила для вас чек в выписку if.
Идеально! Спасибо, Росс!
Нет проблем, если предоставленный ответ устранил вашу проблему, отметьте его как принятый. Это может помочь будущим пользователям быстрее находить решение при поиске, но не является обязательным.
var files = fldr.getFilesByType('text/csv'); while (fldr.hasNext())Проверьте имена переменных.Cannot find function ... in object ...— это большая подсказка, что названный вами объект — это не то, что вы ищете.