如何添加所有具有命名值的 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}
参考文献:
我正在将 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}