Использование результатов поиска диска приводит к ошибке итератора - PullRequest
0 голосов
/ 07 мая 2018

Я получаю эту ошибку с моим кодом скрипта Apps:

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

Эта ошибка возникает в строках:

var priceChangeImage = DriveApp.getFilesByName("Price Change_" + tickerSymbol + ".png").next();

var earningsRevisionsImage = DriveApp.getFilesByName("Earnings Revisions_" + tickerSymbol + ".png").next();

var FgpeImage = DriveApp.getFilesByName("F-GPE_" + tickerSymbol + ".png").next();

Контекст выполнения:

  //Slide4
  var shapeSlide4 = slides[3].getShapes();
  var priceChangeImage = DriveApp.getFilesByName("Price Change_" + tickerSymbol + ".png").next();
  var newImage4 = shapeSlide4[0].replaceWithImage(priceChangeImage);
  newImage4.setWidth(650);
  newImage4.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);

  //Slide5
  var shapeSlide5 = slides[4].getShapes();
  var earningsRevisionsImage = DriveApp.getFilesByName("Earnings Revisions_" + tickerSymbol + ".png").next();
  var newImage5 = shapeSlide5[0].replaceWithImage(earningsRevisionsImage);
  newImage5.setWidth(650);
  newImage5.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);

  //Slide6
  var shapeSlide6 = slides[5].getShapes();
  var FgpeImage = DriveApp.getFilesByName("F-GPE_" + tickerSymbol + ".png").next();
  var newImage6 = shapeSlide6[0].replaceWithImage(FgpeImage);
  newImage6.setWidth(650);
  newImage6.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);


  newSlideNotify(slideUrl);

}

Почему я получаю эту ошибку? Как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Ваш код не работает, потому что вы слепо звоните next() на FileIterator, не проверив сначала, что был найден результат для вашего поиска.

Правильный метод для работы с итераторами файлов и папок - сначала вызвать hasNext().

Этот пример получает первый результат поиска по заданному имени файла и выдает ошибку, если ваш поиск не дал результатов (поэтому вы знаете, нужно ли вам исправить поиск или имена файлов).

function getFirstFileWithName_(searchName) {
  var allFiles = getAllFilesWithName_(searchName);
  // Were there any results from the search?
  if (allFiles.length === 0)
    throw new Error("No files with name '" + searchName + "'");

  return allFiles[0];
}
function getAllFilesWithName_(name) {
  var results = DriveApp.getFilesByName(name);
  var files = [];
  while (results.hasNext()) {
    files.push(results.next());
  }
  return files;
}
0 голосов
/ 07 мая 2018

Попробуйте использовать приведенный ниже код:

    var shapeSlide4 = slides[3].getShapes();
        var filesPriceChange = DriveApp.getFilesByName("Price Change_"+tickerSymbol+".png");
        if(filesPriceChange.hasNext())
        {
              var priceChangeImage = filesPriceChange .next();
        }
          var newImage4 = shapeSlide4[0].replaceWithImage(priceChangeImage);
          newImage4.setWidth(650);
          newImage4.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);

          //Slide5
          var shapeSlide5 = slides[4].getShapes();
    var filesEarningsRevisions = DriveApp.getFilesByName("Earnings Revisions_"+tickerSymbol+".png");
        if(filesEarningsRevisions .hasNext())
        {
              var earningsRevisionsImage = filesEarningsRevisions .next();
        }
      var newImage5 = shapeSlide5[0].replaceWithImage(earningsRevisionsImage);
      newImage5.setWidth(650);
      newImage5.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);

      //Slide6
      var shapeSlide6 = slides[5].getShapes();
var filesFgpe = DriveApp.getFilesByName("F-GPE_"+tickerSymbol+".png");
if(filesFgpe.hasNext())
{
      var FgpeImage = filesFgpe.next();
}
      var newImage6 = shapeSlide6[0].replaceWithImage(FgpeImage);
      newImage6.setWidth(650);
      newImage6.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);


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