Скрипт приложения Google : Ошибка при прикреплении нескольких изображений (Неожиданная ошибка при получении метода или свойства getFileById в приложении object DriveApp)

#javascript #email #google-apps-script #attachment

Вопрос:

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

Исключение: Непредвиденная ошибка при получении метода или свойства getFileById в приложении object DriveApp.

Это мой код прямо сейчас:

 function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 1; // First row of data to process
  var numRows = 3; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 5);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var image = DriveApp.getFileById(row[2]).getBlob();
    var image2 = DriveApp.getFileById(row[3]).getBlob();
    var subject = 'TAYDO 2021 Certificate';
  }

  MailApp.sendEmail({
    to:emailAddress, 
    subject:subject,   
    body:message,  
    attachments: [image.next(),image2]
  });
}
 

Сценарий приложения имеет все разрешения, необходимые для запуска этого сценария, а листы, диск и все остальное находятся под одним и тем же аккаунтом Google.
Кто-нибудь может помочь? Заранее спасибо!

Комментарии:

1. Как вы row[2] себя чувствуете и row[3] как выглядите? Если вы регистрируете эти значения, что вы получаете?

Ответ №1:

Это работает для меня:

 function attachimages() {
  let fldr = DriveApp.getFolderById(gobj.globals.imagesfolderid);
  let files = fldr.getFiles();
  let imgA = [];
  while(files.hasNext()) {
    let file = files.next();
    if(file.getName().slice(0,3) == 'die') {
      imgA.push(file.getBlob().getAs('image/jpeg'))
    }
  }
  MailApp.sendEmail({to:'jimesteban@jimesteban.com',subject:'Test Images Attachment',body: 'See Attached Images', attachments:imgA});
}
 

Моим изображениям случилось быть названными die1.jpg, die2.jpg …. и так далее, это изображения граней игральной кости.

Это тоже сработало для меня:

 function sendEmails() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet0');
  const rg = sh.getRange(2, 1, 3, 4);
  const vs = rg.getValues();
  vs.forEach((r, i) => {
    let emailAddress = r[0];
    let message = r[1];
    let image1 = DriveApp.getFileById(r[2].toString()).getBlob();
    let image2 = DriveApp.getFileById(r[3].toString()).getBlob();
    let subject = 'Test Attach Images';
    MailApp.sendEmail({ to: emailAddress, subject: subject, body: message, attachments: [image1, image2] });
  });
}
 

Лист0:

Электронная почта Сообщение Изображение 1 Изображение 2
Отредактировано Сообщение 1 Отредактировано Отредактировано
Отредактировано Сообщение 2 Отредактировано Отредактировано
Отредактировано Сообщение 3 Отредактировано Отредактировано

Комментарии:

1. Спасибо! Проблема в том, что у меня есть список с более чем 100 различными изображениями, в зависимости от идентификатора в соответствующей колонке, он должен прикрепить конкретное изображение к отправляемой почте. Таким образом, каждая строка отправляет определенному человеку 1,2 или 3 изображения. И я не знаю, можно ли использовать для этого ваш представленный код…

2. r[2] и r[3] являются идентификаторами

3. О, второй код, который вы опубликовали, работает, к сожалению, еще меньше. Он выдает то же самое сообщение об ошибке и говорит, что строки 6 и 10 неисправны. Я также не знаю, что такое команда vs. в строке 6, я никогда не видел этого раньше

4. Я протестировал второй код, и он работает для меня. Поэтому вам, возможно, придется внести некоторые небольшие изменения, чтобы заставить его работать на вас, например, изменить названия листов и т. Д.

5. Является ли ваша среда выполнения V8. Если вы все еще управляете Носорогом, то второй вариант для вас не подойдет. Вам следует обновить среду выполнения до версии 8.