Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 修改Google文档模板,然后在填写Google表单时将其作为docx发送到电子邮件中_Google Apps Script - Fatal编程技术网

Google apps script 修改Google文档模板,然后在填写Google表单时将其作为docx发送到电子邮件中

Google apps script 修改Google文档模板,然后在填写Google表单时将其作为docx发送到电子邮件中,google-apps-script,Google Apps Script,我正试图用谷歌表单提交的相关信息修改模板文档,然后以word文档的形式向填写表单的人发送一封包含已填写文档的电子邮件。我可以设法更新模板,甚至可以将其附加为pdf格式,但它需要由接收者进行编辑,因此这不是一个真正的选项。这是我的密码: //Set template variables var docTemplate = "1_l4T-MVXYXWPvirgE9aE25hKOejTqf9AcfHCKRC67Fk"; var docName = "Editorial Briefing Form";

我正试图用谷歌表单提交的相关信息修改模板文档,然后以word文档的形式向填写表单的人发送一封包含已填写文档的电子邮件。我可以设法更新模板,甚至可以将其附加为pdf格式,但它需要由接收者进行编辑,因此这不是一个真正的选项。这是我的密码:

//Set template variables
var docTemplate = "1_l4T-MVXYXWPvirgE9aE25hKOejTqf9AcfHCKRC67Fk";
var docName = "Editorial Briefing Form";

//Get pertinent info from form
function onFormSubmit(e) {
  var timeStamp = e.values[1];
  var RequestorName = e.values[2];
  var Account = e.values[3];
  var JobNumber = e.values[4];
  var Files = e.values[6];
  var StartDate = e.values[7];
  var BudgetHours = e.values[8];
  var ActualDeadline = e.values[10];
  var Email = e.values[11];

  // Get template and save a copy with a new name
  var copyId = DriveApp.getFileById(docTemplate)
  .makeCopy(docName+' for '+RequestorName)
  .getId();

  var copyDoc = DocumentApp.openById(copyId);

  var copyBody = copyDoc.getActiveSection();

//replace tags with form info
  copyBody.replaceText('keyAccount', Account);
  copyBody.replaceText('keyJobNumber', JobNumber);
  copyBody.replaceText('keyStartDate', StartDate);
  copyBody.replaceText('keyRequestorName', RequestorName);
  copyBody.replaceText('KeyFiles', Files);
  copyBody.replaceText('KeyBudgetHours',BudgetHours);
  copyBody.replaceText('KeyActualDeadline', ActualDeadline);

  copyDoc.saveAndClose()


MailApp.sendEmail(Email, 'test', 'see attachment', {attachments:[copyDoc]});
}
我在网上看到的唯一一件事就是谷歌OAuth,但我对此一无所知

任何帮助都将不胜感激

谢谢


汤姆

我刚刚想出了类似的办法。我无法从onFormSubmit(e)中让它工作,但我将它设置为在表单提交时作为电子表格的触发器运行,然后告诉它获取最后一行数据,因为表单提交将数据放在最后一行(除非您有另一个脚本排序)。因此,我的代码如下所示:

function FormSubmitEmail(){

    var templateid = "your template id here";
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var row = sheet.getLastRow();
    var data = sheet.getRange(5,1,sheet.getLastRow()-1,sheet.getLastColumn()).getValues();
    var today = Utilities.formatDate(new Date(), "CST", "MM/dd/yy");
    var firstname = sheet.getRange("B"+row).getValues();
    var lastname = sheet.getRange("C"+row).getValues();
    var docname = (lastname+", "+firstname+" "+today);

    var folder = DriveApp.getFolderById("I have mine saving a copy also to a folder, your folder ID here"); 
    var docid = DriveApp.getFileById(templateid).makeCopy(docname, folder).getId(); 
    Logger.log(docid);

    var doc = DocumentApp.openById(docid);
    var body = doc.getActiveSection();
        body.replaceText("%DateCreated%",(sheet.getRange("A"+row).getValues()));
        body.replaceText("%FirstName%",(sheet.getRange("B"+row).getValues()));
        body.replaceText("%LastName%",(sheet.getRange("C"+row).getValues()));
        body.replaceText("%EmailAddress%",(sheet.getRange("M"+row).getValues()));  //etc.

    doc.saveAndClose();

    var message = "See attached, or find in folder: https://drive.google.com/drive/folders/[your folder id here]"; // Customize message
    var emailTo = "email2@gmail.com, email1@gmail.com" // replace with your email
    var subject = "A form has been submitted!."; // customize subject 
    var pdf = DriveApp.getFileById(docid).getAs('application/pdf').getBytes();
    var attach = {fileName:'Autogenerated template.pdf',content:pdf, mimeType:'application/pdf'}; // customize file name: "Autogenerated template"
    MailApp.sendEmail(emailTo, subject, message, {attachments:[attach]});
}
你可以考虑使用AdDon。它使用模板自动将Google表单提交转换为任何文件格式,包括.docx文件。(免责声明:我是作者)