Mail Merge и sendEmail выполняются в одиночку. Как я могу заставить их работать вместе? - PullRequest
0 голосов
/ 26 июня 2019

Предвосхищая этот вопрос следующим образом: я начинающий программист.Это мое первое знакомство со скриптом Служб Google, и я в недоумении от того, что делать.Извиняюсь, если об этом уже спрашивали.

Я создал Mail Merge в Apps Script и протестировал его.Он работает так, как я хотел.Я создал отдельный скрипт sendEmail, который также работает как положено.Однако теперь, когда я уверен, что мой код работает, мне нужно найти способ заставить сценарии Mail Merge и sendEmail работать вместе.

Обзор:

MailMerge Script считывает и собирает данные изGoogle Sheet, заменяет текст {} в шаблоне Google Doc данными на листе и создает уникальное сообщение на основе вышеупомянутых данных.

Сценарий sendEmail собирает данные из этого же листа, но использует шаблонSheet, заменяет текст {} и отправляет электронные письма без проблем.

Что я пытаюсь сделать:

Получите скрипт sendEmail, чтобы вызвать заполненный документ MailMerge Doc и индивидуально отправлять электронные письма дляотдельные записи.

Я уже пытался переместить свой код из одного проекта в другой с помощью метода копирования-вставки для тестирования, попытался вызвать новую переменную, которая ссылается на docFProduct после его выполнения (я думаю),и исследовал сайт разработчиков для помощи без реального решения моей проблемы.

Фрагменты кода такчто любой, кто хочет помочь, может видеть, что я делаю:

Слияние почты:

function myFunction() {
  const docMTemplateID = ""; //empty strings to replace with Google App IDs
  const docFProductID = ""; //""
  const gsheetID = ""; //""

  var docMTemplate = DocumentApp.openById(docMTemplateID);
  var docFProduct = DocumentApp.openById(docFProductID);
  var gsheet = SpreadsheetApp.openById(gsheetID).getSheetByName("Data");

  var data = gsheet.getRange(2, 1, gsheet.getLastRow()-1,5).getValues();

  var templateParagraph = docMTemplate.getBody().getParagraphs();

  docFProduct.getBody().clear();

  data.forEach(function(r){
     createMailMerge(r[0], r[1], r[3], r[4], docFProduct, templateParagraph);
 });

function createMailMerge(first, last, team, number, docFProduct, 
templateParagraph){

  templateParagraph.forEach(function(p) {
    var theType = p.getType();
    if(theType == "PARAGRAPH"){
    docFProduct.getBody().appendParagraph(
      p
     .copy()
     .replaceText("{first}", first)
     .replaceText("{last}", last)
     .replaceText("{team}", team)
     .replaceText("{number}", number)
);
  }
    else if(theType == "LIST_ITEM"){
    docFProduct.getBody().appendListItem(
      p
     .copy()
     .replaceText("{first}", first)
     .replaceText("{last}", last)
     .replaceText("{team}", team)
     .replaceText("{number}", number)
).setGlyphType(DocumentApp.GlyphType.BULLET);  
    }

  })

  docFProduct.getBody().appendPageBreak();
}

sendEmail:

function sendEmail() {

  var finalProductID = docFProduct();

  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data").activate();

  var finalProduct = ScriptApp.getService(finalProductID);

  var templateText = finalProduct.getValue();
  // var templateText = SpreadsheetApp.getActiveSpreadsheet()
  //.getSheetByName("Template")
  //.getRange(1, 1)
  //.getValue();

  for (var i = 2; i <= lr; i++) {

    var cEmail = ss.getRange(i, 3).getValue();
    var cTeamInterest = ss.getRange(i, 4).getValue();
    var cName = ss.getRange(i, 1).getValue();

    var mBody = templateText.getBody();
    var sLine = "Thank you for your interest in " + cTeamInterest +
      "!";
    MailApp.sendEmail(cEmail, sLine, mBody);
  }
}

Ожидаемый результат:

Слияние по почте будет завершено и заполнить уникальные сообщения в docFProduct Google Doc.Когда вызывается sendEmail, он рассылает эти сообщения из docFProduct как электронные письма предполагаемым получателям (электронные письма, которые находятся в Google Sheet), НЕ редактируя из шаблона в Google Sheet.

...