Получить последний добавленный файл с Диска

Я пишу скрипт для поиска самого последнего добавленного 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. 
    }
  }
}
var files = fldr.getFilesByType('text/csv'); while (fldr.hasNext()) Проверьте имена переменных. Cannot find function ... in object ... — это большая подсказка, что названный вами объект — это не то, что вы ищете.
sinaraheneba 18.07.2019 04:45

@sinaraheneba какие-нибудь советы о том, что мне нужно изменить в моем коде, чтобы он заработал?

Thomas Christopher 18.07.2019 04:54

Вы пытаетесь перебрать объект папки, а не файлы.

ross 18.07.2019 10:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблемы:

  • Ваша переменная 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. 
    }
  }
}

использованная литература

Спасибо @росс! Кажется, это работает, однако содержимое копируется из всех CSV-файлов в папке, а не только из самых последних. Нужно ли мне изменить сценарий, чтобы найти что-нибудь, что не помечено как «старое»?

Thomas Christopher 19.07.2019 03:37

Да — изменение последних 3 символов имени файла не изменит тип файла на Google Диске. Я добавила для вас чек в выписку if.

ross 19.07.2019 10:02

Идеально! Спасибо, Росс!

Thomas Christopher 22.07.2019 03:30

Нет проблем, если предоставленный ответ устранил вашу проблему, отметьте его как принятый. Это может помочь будущим пользователям быстрее находить решение при поиске, но не является обязательным.

ross 22.07.2019 10:06

Другие вопросы по теме