Редактор сценариев Google Docs пытается автоматически сгенерировать письмо из автоматически сгенерированного документа - PullRequest
2 голосов
/ 11 октября 2019

Все, что я нашел в этой теме, включает в себя заполнение листа Google документом Google, который затем отправляет электронное письмо. Я лично вставил некоторый код, который нашел в Интернете, в редактор сценариев документа. Теперь при открытии документа пользователю предлагается ответить на вопросы. ответы автоматически заполняют новый документ, который создается. Затем скрипт вызывает отправку электронного письма.

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

Это код, который у меня есть в редакторе скриптов. В последней строке я перепробовал множество вещей, чтобы тело нового документа заполнило тело письма, но не повезло. Может кто-нибудь сказать мне язык программирования о том, как сделать эту работу, пожалуйста?

    function myFunction() {
      // Display a dialog box for each field you need information for.

      var ui = DocumentApp.getUi();
      //var response = ui.prompt('Enter Name', 'Enter sales person's name', ui.ButtonSet.OK);
      var shiftResponse = ui.prompt('Enter shift, i.e. 7-3 or 3-11');
      var peersResponse = ui.prompt('Enter peers on shift');
      var participantsResponse = ui.prompt('Enter names of face to face encounters');
      var phonelogResponse = ui.prompt('Enter names of people we called on phone log');
      var filescreatedResponse = ui.prompt('Enter names of people we created files for');
      var notesResponse = ui.prompt('Enter any notes about shift');
      var cleanResponse = ui.prompt('Was Crisis Center Cleaned? Enter yes or no');
      var authorResponse = ui.prompt('Enter your name');
      var date = Utilities.formatDate(new Date(), "GMT", "MM/dd/yyyy");

      //Make a copy of the template file
      var documentId = DriveApp.getFileById('1lXTJPvwlJrXkRJ807daFsFbfaiC_wl7EAQ4giixLeEc').makeCopy().getId();

      //Rename the copied file
      DriveApp.getFileById(documentId).setName(date + " " + shiftResponse.getResponseText() + ' Shift Report');  

      //Get the document body as a variable
      var body = DocumentApp.openById(documentId).getBody();

      //Insert the entries into the document
      body.replaceText('##date##', date);
      body.replaceText('##shift##', shiftResponse.getResponseText());
      body.replaceText('##peers##', peersResponse.getResponseText());
      body.replaceText('##participants##', participantsResponse.getResponseText()); 
      body.replaceText('##phonelog##', phonelogResponse.getResponseText());
      body.replaceText('##filescreated##', filescreatedResponse.getResponseText());  
      body.replaceText('##notes##', notesResponse.getResponseText());
      body.replaceText('##clean##', cleanResponse.getResponseText());
      body.replaceText('##author##', authorResponse.getResponseText());  

      MailApp.sendEmail("jason.chrystal@voicesofhopececilmd.org", "Shift Report", body);
    }

1 Ответ

1 голос
/ 11 октября 2019

Как указано в документации:

Методы replaceText ожидают значение шаблона регулярного выражения в качестве первого параметра:

https://developers.google.com/apps-script/reference/document/body#replacetextsearchpattern,-replacement

Также последний параметрПараметр MailApp.sendMail ожидает строку, и вы передаете ей объект класса тела.

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

body.replaceText(/^##date##$/, date);
body.replaceText(/^##shift##$/, shiftResponse.getResponseText());
body.replaceText(/^##peers##$/, peersResponse.getResponseText());
etc...

- регулярное выражение не проверено.

Если вам не нравятся регулярные выражения, вы можете использовать body.setText () в качестве альтернативы, например так:

var oldBodyText = body.getText();
body = body.setText(oldBodyText.replace('##date##', date));

oldBodyText = body.getText();
body = body.setText(oldBodyText.replace('##shift##', shiftResponse.getResponseText()));

oldBodyText = body.getText();
body = body.setText(oldBodyText.replace('##peers##', peersResponse.getResponseText()));

etc...

// And then the last lines:
var newBody = body.getText();
MailApp.sendEmail("jason.chrystal@voicesofhopececilmd.org", "Shift Report", newBody);

...