如何添加所有具有命名值的 headers

How do I add all headers with named values

我正在将 Google 表单提交转换为 pdf 文件,代码似乎适用于表单中列出的问题值。但是我也有多个列可以根据答案计算数据。我想知道如何将所有 headers 添加到构造信息列表中。

下面是我正在使用的代码。但是,它仅从表单提交生成的 namedValues 中获取数据。我需要将所有列的最后一行的数据添加到构造的信息中

function After_Submit(e){

  const info = e.namedValues;
  const pdfFile = Create_PDF(info);  
  
  console.log(info);
  
  sendEmail(e.namedValues['Email Address to Receive file'][0],pdfFile);  
}

function sendEmail(email,pdfFile){
  
  GmailApp.sendEmail(email, "Subject", "File Attached", {
    attachments: [pdfFile], 
    name: "PDF Sender"

  });
 
}
function Create_PDF(info) {
  
  const PDF_folder = DriveApp.getFolderById("Storage destination ID");
  const TEMP_FOLDER = DriveApp.getFolderById("Temp Folder ID");
  const PDF_Template = DriveApp.getFileById('template ID');
  
  const newTempFile = PDF_Template.makeCopy(TEMP_FOLDER);
  const  OpenDoc = DocumentApp.openById(newTempFile.getId());
  const body = OpenDoc.getBody();
  
  console.log(body);
  
   body.replaceText("{{value1}}", info['value1'][0])
   body.replaceText("{{value2}}", info['value2'][0]);
   body.replaceText("{{value3}}", info['value3'][0]);

  OpenDoc.saveAndClose();
  

  const BLOBPDF = newTempFile.getAs(MimeType.PDF);
  const pdfFile =  PDF_folder.createFile(BLOBPDF).setName("FLHA");
  console.log("The file has been created ");
  
  return pdfFile;

}

使用表单提交事件中的 range object Object 获取所有必要的详细信息(例如 headers,新添加的表单数据和制定的列值)并使用它来创建一个 Object,您可以使用它来填充您的 PDF。

在我下面的示例中,我创建了一个表单,该表单将填充列 A-H,并将公式化的列添加到 I-O.

输入:

代码:

function After_Submit(e){
  var range = e.range;
  var row = range.getRow(); //get the row of newly added form data
  var sheet = range.getSheet(); //get the Sheet
  var headers = sheet.getRange(1, 1, 1, 15).getValues().flat(); //get the header names from A-O
  var data = sheet.getRange(row, 1, 1, headers.length).getValues(); //get the values of newly added form data + formulated values
  var values = {}; // create an object 
  for( var i = 0; i < headers.length; i++ ){
    values[headers[i]] = data[0][i]; //add elements to values object and use headers as key
  }

  Logger.log(values);
}

注:

  • 与使用 namedValues 不同,此方法将包括没有数据的列。
  • 如果你想调整headers的个数到你的object,只需更改var header的第4个参数即可。

结果:

{4=, Location of Work=Test, 1=X, 6=, Workers Present=Test, Test2, 2=X, 5=X, 7=, Work To Be Done=Test, Timestamp=Tue Oct 12 06:06:30 GMT+08:00 2021, Environmental Hazards=Dust / Mist Fumes, Noise in area, Waste, 3=, Tasks To Be Completed=Test, Muster Point=Test, PPE Inspected=Test}

参考文献: