Скрипт Google Apps "не удалось получить доступ к документу" - PullRequest
1 голос
/ 27 мая 2020

Недавно мне было поручено создать слайд-шоу из общей папки Google Диска, содержащей изображения нескольких разных форматов. Попробовав несколько надстроек для слайдов, я решил «укусить пулю» и написать скрипт приложений, что на самом деле оказалось не так сложно, как я предполагал. Скрипт, который прилагается ниже, работал правильно в течение нескольких дней, но теперь выдает следующую ошибку: Exception: Service Slides failed while accessing document with id [removed, but was the correct document ID]. at updateSlideshow(Update Slideshow:18:68).

Я провел небольшое исследование, и он не похож на эту конкретную ошибку очень распространено.

Несколько других примечаний, которые могут иметь отношение:

  1. Скрипт выполняется с привязкой к контейнеру к рассматриваемому документу Slides, который является слайд-шоу изображений.
  2. Скрипту требуется время для завершения (265 секунд при последнем успешном запуске).

Вот полный скрипт приложений:

function updateSlideshow() {
  // Setup
  var pres = SlidesApp.getActivePresentation();
  var presWidth = pres.getPageWidth();
  var presHeight = pres.getPageHeight();
  // Clear everything
  var slides = pres.getSlides()
  while (slides.length > 0) {
    slides.pop().remove();
  };
  // Add all images from Drive folder
  var parentId = DriveApp.getFileById(pres.getId()).getParents().next().getId();
  var srPicIter = DriveApp.searchFiles(
    '(mimeType contains "png" or mimeType contains "jpg" or mimeType contains "jpeg" or mimeType contains "bmp") and "' + parentId + '" in parents');
  while (srPicIter.hasNext()) {
    var file = srPicIter.next();
    // Place image on slide
    var image = pres.appendSlide(SlidesApp.PredefinedLayout.BLANK).insertImage(file.getBlob());
    // Determine fit-to-page scale ratio
    if (image.getWidth()/image.getHeight() > presWidth/presHeight) {
      // Image is wider than slide
      var ratio = presWidth/image.getWidth();
    } else {
      // Image is taller than slide
      var ratio = presHeight/image.getHeight();
    };
    // Apply scaling ratio and align center
    image.scaleWidth(ratio).scaleHeight(ratio).alignOnPage(SlidesApp.AlignmentPosition.CENTER);
  };
};
...