Как извлечь элемент электронной таблицы как строку, а не как элемент массива Google App Script - PullRequest
0 голосов
/ 06 августа 2020

(Отредактировано описание проблемы)

То, что я пытаюсь сделать: Использование этой электронной таблицы для сбора URL-адресов построчно и вставки каждого изображения в новый слайд Google Slide с именем Output Document. Я использую функцию addImagetoSlide, которая принимает imageUrl, номер слайда и имя документа для добавления изображений к каждому элементу слайда.

Где я застрял Когда я пытаюсь использовать dataRange (массив, содержащий мой элемент электронной таблицы, он хорошо работает за пределами while l oop, но внутри while l oop он не читает элемент [0] [2], говоря, что «Невозможно прочитать свойство 2 строчки .. Не понимаю, почему снаружи работает а внутри пока нет l oop

function collateImages(){
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var sheet = ss.getActiveSheet();
     var targetDocument = SlidesApp.create("Output Document"); // Target file for the collation 
    
     var dataRange = sheet.getDataRange(); // Range of the entire database
     Logger.log(dataRange.getValues()[0][2]);
     Logger.log(dataRange.getValues()[1][2]);
     Logger.log(dataRange.getValues()[2][2]);
     Logger.log(dataRange.getValues()[3][2]);
     var i = 0; // Iterator
     while (i< dataRange.getLastRow()){
       i = i + 1; 
       Logger.log(dataRange.getValues()[i][2]);
       addImageToSlide(doubtRange.getValues()[i][2],i,targetDocument);
      }
    }
// Function to get file id from url
function getIdFromUrl(url) { return url.match(/[-\w]{25,}/); }

//Add Image with URl "ImageUrl" on slide number "index on a presentation named "deck"  
function addImageToSlide(imageUrl, index,deck) {
  var slide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  var imagefile = DriveApp.getFileById(getIdFromUrl(imageUrl));
  var imageblob = imagefile.getBlob();
  var image = slide.insertImage(imageblob);
 }

1 Ответ

0 голосов
/ 07 августа 2020

Проблема с кодом, который вы использовали, заключается в том, что вы пытаетесь получить доступ к несуществующему индексу. Поскольку вы увеличиваете значение i на последнем l oop, при вызове dataRange.getValues()[i][2] он будет пытаться получить элемент, соответствующий увеличенному i, который выпадает из диапазона, следовательно, сообщение об ошибке вы получают.

Вы можете:

  • переместить приращение i после вызова dataRange.getValues()[i][2];

  • использовать a for loop;

Ссылка

...