谷歌应用程序脚本:创建一个PDF通过编辑响应谷歌的形式。

问题描述 投票:0回答:2

我希望有人能帮助我,我想做的是让谷歌表单创建一个新的文档,当表单被编辑后,通过电子邮件发送该pdf。

我知道,当你编辑一个表格时,电子表格中的脚本不会运行,所以我把脚本放到了一个表格中,这就是我遇到的问题。 我无法让脚本读取表单中重新提交的值,它只是一直在返回时出现 "未定义"。

这是我目前得到的脚本。

function Test(e) {

  var form = FormApp.openById('****Form Key****'); //Enter Form ID here

var docTemplate = "***doc to be used***";  
   var docName      = "***Name of document***";

   var formResponse = form.getResponses();

  var one =  e.response;  //I have tried e.value but does not pull through
  var two =  e.response;  // Column 2

  var copyId = DocsList.getFileById(docTemplate)
                .makeCopy(docName)
                .getId();
// Open the temporary document
   var copyDoc = DocumentApp.openById(copyId);
// Get the document’s body section
   var copyBody = copyDoc.getActiveSection(); 

  copyBody.replaceText('one', one);
  copyBody.replaceText('two', two);

 // Save and close the temporary document
   copyDoc.saveAndClose();

// Convert temporary document to PDF by using the getAs blob conversion
   var pdf = DocsList.getFileById(copyId).getAs("application/pdf");  

//Sends the email
  var email_Address =  "***Email Address***"
     var subject = "***Subject";
  var body    = "**Body***"; 
  MailApp.sendEmail(email_Address,  subject, body, {attachments: pdf});  

}}

任何帮助都将是非常感激的,因为我已经被这个问题卡住了一段时间,谢谢你。

google-apps-script google-form
2个回答
1
投票

在表单响应触发函数中,事件是一个实例,即 类 FormResponse. 正因为如此,你不需要打开表格,也不需要得到回复... 你只是得到了一个递给你的,你可以通过以下方式访问 e.response. 请参阅表格响应事件在 了解事件.)

// Handle form response event
// This function must be a Form Response Trigger, attached to
// a Form (not a Spreadsheet).
function rightTest( e ) {
  var formResponses = e.response.getItemResponses(); // array of responses
  var one = formResponses[0];
  var two = formResponses[1];
  ...
}

1
投票

从2015年4月起,不支持DocsList,只需将DocsList.替换为DriveApp即可。如何在我的代码中把DocsList更新为DriveApp?

© www.soinside.com 2019 - 2024. All rights reserved.