此脚本旨在根据 google 表单响应创建自定义 PDF 文件。几天前这有效,但突然停止执行。
有问题的变量/属性(“info”)似乎存在,但它仍然返回未定义的错误
作为参考,这是脚本:
function createPDF(info) {
const pdfFolder = DriveApp.getFolderById("1GiY42M3rTq36M9pnUq7Y6RE1qQ8TFN8X");
const tempFolder = DriveApp.getFolderById("1bkzpVTURICEvcJWemFGaOYTZSdeF_XNj");
const templateDoc = DriveApp.getFileById("1UfFzcIdG1DCAYpk-NWSiA7bEoz1ZSJXeuV_9-Okw_vg");
const newTempFile = templateDoc.makeCopy(tempFolder);
const openDoc = DocumentApp.openById(newTempFile.getId());
const body = openDoc.getBody();
body.replaceText("{Date of Request}",info['Date of Request'][0]);
body.replaceText("{Requestor}",info['Requestor'][0]);
body.replaceTest("{Line}",info['Line'][0]);
body.replaceText("{Cost Centre}", info['Cost Centre (if known)'][0]);
body.replaceText("{Project Name}", info['Project Name'][0]);
body.replaceText("{Project Code}", info['Project Code'][0]);
body.replaceText("{PN}", info['Part Number or Serial Number'][0]);
body.replaceText("{Reason for Requirement}", info['Reason for Requirement'][0]);
body.replaceText("{Quantity}", info['Quantity'][0]);
body.replaceText("{Description}", info['Description'][0]);
body.replaceText("{Have}", info['Have these products been deemed scrap by the Linelead/Area owner?'][0]);
openDoc.saveAndClose();
const blobPDF = newTempFile.getAs(MimeType.PDF);
const pdfFile = pdfFolder.createFile(blobPDF).setName(info['Requestor'][0] + " " + info['Date of Request'][0]);
tempFolder.removeFile(newTempFile);
return pdfFile;
}
这是变量/属性基于谷歌表单响应(谷歌表) Google 表格标题
这是错误: 类型错误:无法读取未定义的属性(读取“请求日期”) 创建PDF @ Code.gs:35
“信息”对象被检查为具有“请求日期”(如谷歌表中表单响应的标题所示)
代码失败的一个可能原因是它期望
info
参数被构造为一个对象,其值包装在数组中。如果 info
的输入与此预期结构不匹配,则尝试访问类似属性可能会返回 undefined
,从而在尝试从中读取 TypeError
时导致出现 [0]
。
为了避免未定义值的问题,我建议直接从数据行创建替换对象,而不将值包装在数组中。这种方法允许您直接引用值,例如使用
row[2]
表示“请求日期”,从而简化了代码。使用 getValues()
提供清晰的 2D 数组,使您的代码更加可靠并减少出错的机会。
注意:
removeFile()
已被弃用。
function createPDF() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1');
const data = sheet.getDataRange().getValues();
const pdfFolder = DriveApp.getFolderById("1GiY42M3rTq36M9pnUq7Y6RE1qQ8TFN8X");
const tempFolder = DriveApp.getFolderById("1bkzpVTURICEvcJWemFGaOYTZSdeF_XNj");
const templateDoc = DriveApp.getFileById("1UfFzcIdG1DCAYpk-NWSiA7bEoz1ZSJXeuV_9-Okw_vg");
for (let i = 1; i < data.length; i++) {
const row = data[i];
const replacements = {
"{Date of Request}": row[2] || "N/A",
"{Requestor}": row[3] || "N/A",
"{Line}": row[4] || "N/A",
"{Cost Centre}": row[5] || "N/A",
"{Project Name}": row[6] || "N/A",
"{Project Code}": row[7] || "N/A",
"{PN}": row[8] || "N/A",
"{Reason for Requirement}": row[9] || "N/A",
"{Quantity}": row[10] || "N/A"
};
const newTempFile = templateDoc.makeCopy(tempFolder);
const openDoc = DocumentApp.openById(newTempFile.getId());
const body = openDoc.getBody();
for (const [key, value] of Object.entries(replacements)) {
body.replaceText(key, value);
}
openDoc.saveAndClose();
const blobPDF = newTempFile.getAs(MimeType.PDF);
pdfFolder.createFile(blobPDF).setName(replacements['{Requestor}'] + " " + replacements['{Date of Request}']);
//tempFolder.removeFile(newTempFile);
}
}