Прикрепить несколько файлов - Google Таблицы/Gmail/Диск

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

Любые советы о том, как получить (1) и (2) [ниже]

Обновлено для получения дополнительной информации:

Основная цель состоит в том, чтобы добавить несколько имен файлов в Col[3] и прикрепить файлы к черновику, используя имена файлов, указанные в Col[3]. Пример: если я наберу в Col[3] следующее: "test.pdf, test2.pdf" он прикрепит файлы «test.pdf» и «test2.pdf» для этого конкретного проекта. На данный момент сценарий прикрепляет к черновику один файл, но если я ввожу несколько имен файлов, разделенных запятыми, черновик вообще не создается.

Ниже я приложил скриншот того, как электронная таблица выглядит при запуске скрипта (в настоящее время я не могу вставлять изображения):

https://imgur.com/a/sVoHO3Q

Когда я запускаю скрипт, используя информацию со скриншота, 2-я строка вообще не создает черновик, 3-я строка создает черновик с вложением, а 4-я строка вообще не создает черновик.

Можно ли создать черновик и прикрепить несколько файлов, используя имена файлов, разделенные запятыми, а также создать черновики, когда некоторые ячейки в столбце [3] пусты?

TLDR:

  1. Как прикрепить несколько файлов к отдельным черновикам

  2. Как создать черновик без вложений

function SaveDrafts() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var rows = 1000;
  var dataRange = sheet.getRange(startRow, 1, rows, 5);
  var data = dataRange.getValues();

  for (i in data) {
    var row = data[i];
    var emailAddress = row[0];
    var subject = row[1];
    var message = row[2];
    var pdfName = row[3];
    var cc = row[4];
    var list = DriveApp.getFilesByName(pdfName);

    if (list.hasNext()) {
      var File = list.next();
      GmailApp.createDraft(emailAddress, subject, message, {
        cc: cc,
        attachments: [File]
      });
    }
  }
}

Насчет How to attach multiple files to individual drafts, я не могу понять, что вы хотите сделать из вашего скрипта. В вашей ситуации в list в var list = DriveApp.getFilesByName(pdfName) есть одно значение. И есть несколько файлов с одинаковым именем. Правильно ли я понимаю? Можете ли вы предоставить подробную информацию об этом? Получив информацию, я хотел бы подумать о решении.

Tanaike 02.03.2019 00:22

Я также хотел бы больше информации. Как это выглядит, когда несколько файлов связаны с одним черновиком электронной почты? Есть ли несколько имен файлов, разделенных запятыми, в строке 3?

Dustin Michels 02.03.2019 01:09

Привет, Танайке и Дастин. Спасибо за быстрый ответ. Я обновил сообщение с дополнительной информацией и добавил скриншот. Пожалуйста, дайте мне знать, если есть что-то еще, что я могу добавить.

Matt 02.03.2019 04:43

@Matt Спасибо за ответ и добавление дополнительной информации. Я заметил, что ответ уже был опубликован только что. Я думаю, что это решит вашу проблему.

Tanaike 03.03.2019 00:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
1 009
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Обновлять: Во-первых, я выполнил split() значения ячейки pdfName, чтобы я мог искать и добавлять по одному файлу за раз.

Создание черновика будет выполняться только при наличии файлов, потому что оно находится внутри оператора list if, отсутствие файлов означает, что оно не будет запущено.

Я вытащил его из этого и создал интератор для list и массив файлов, которые можно передать функции createDraft(). Итератор позволяет добавлять несколько файлов в массив files, если DriveApp.getFilesByName(pdfName) возвращает несколько файлов.

function SaveDrafts() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var rows = 1000;
  var dataRange = sheet.getRange(startRow, 1, rows, 5);
  var data = dataRange.getValues();

  for (i in data) {
    var row = data[i];
    var emailAddress = row[0];
    var subject = row[1];
    var message = row[2];
    var pdfName = row[3].split(','); //split the values taken from cell into array
    var cc = row[4];

    var files = []; //initialize files as empty array.

    for(var j in pdfName){ //run through cell values and perform search
      var results = DriveApp.getFilesByName(pdfName[j]); //Perform the search,results is a FileIterator

      while(results.hasNext()) { //Interate through files found and add to attachment results
        files.push(results.next()); //Add files to array
      }
    }

    GmailApp.createDraft(emailAddress, subject, message, {
      cc: cc,
      attachments: files //the attachments option takes our files array
    });

  }
}

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