Google文档脚本编辑器试图从自动生成的文档中自动生成电子邮件

时间:2019-10-10 23:13:15

标签: google-apps-script editor documentation google-docs

我发现的有关该主题的所有内容都包括让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 个答案:

答案 0 :(得分:1)

文档中的内容:

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);