使用 Google Apps 脚本使用 Gdoc 模板将电子表格行数据保存为 PDF
Save spreadsheet row data to PDF using Gdoc template using Google Apps Script
我已经用尽了我所知道的所有资源。观看了几个不同的教程并花了很多时间来尝试使此代码正常工作。
我正在尝试从电子表格行自动创建 PDF。我在每次成功 运行 时保存代码副本。但是,我无法弄清楚我在哪一点触发了这个错误:
类型错误:无法读取未定义的 属性 'makeCopy'(第 35 行,文件“CreatePDF”)
我能够 运行 在使用“let”定义变量时成功地使用 CreatePDF 函数,但是自从尝试使用函数 createbulkpdfs 从电子表格中提取它们以来,我一直无法取得进展。
任何人都可以指出我正确的方向吗?第 35 行注释如下**
//doc id 1rFkh5AmLPNAJ7z1olWBvubn-6Oh8S8_my-AML1lU48I
//temp folder 12ZEXitbgdyOQJiC-pHvshgsBuNOKEKpj
//pdf folder 1eomwcc_UNJhFhvxcoWwamyJUterZtTaB
//let name = "Dan";
//let email = "daniel.sgalia@gmail.com";
//let cost = "100";
//let squarefeet = "2000";
//let flooringmaterial = "Wood";
//let roofingmaterial = "Standing Seam";
//let sidingmaterial = "Lap";
//let kitchencounter = "Granite";
function createbulkpdfs(){
const docfile = DriveApp.getFileById("1rFkh5AmLPNAJ7z1olWBvubn-6Oh8S8_my-AML1lU48I");
const tempfolder = DriveApp.getFolderById("12ZEXitbgdyOQJiC-pHvshgsBuNOKEKpj");
const pdffolder = DriveApp.getFolderById("1eomwcc_UNJhFhvxcoWwamyJUterZtTaB");
const currentsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SFR Calculations");
const data = currentsheet.getRange(2, 1,currentsheet.getLastRow()-1,15).getValues();
data.forEach(row => {
createPDF(row[0],email,cost,squarefeet,flooringmaterial,roofingmaterial,sidingmaterial,kitchencounter,pdfname,docfile,tempfolder,pdffolder)
});
}
function createPDF(name,email,cost,squarefeet,flooringmaterial,roofingmaterial,sidingmaterial,kitchencounter,pdfname,docfile,tempfolder,pdffolder) {
**LINE 35** const tempfile = docfile.makeCopy(tempfolder);
const tempdocfile =DocumentApp.openById(tempfile.getId());
const body = tempdocfile.getBody();
body.replaceText("{Name}", name);
body.replaceText("{Email}", email);
body.replaceText("{Cost Estimate}", cost);
body.replaceText("{Square Feet}", squarefeet);
body.replaceText("{Flooring Material}", flooringmaterial);
body.replaceText("{Roofing Material}", roofingmaterial);
body.replaceText("{Siding Material}", sidingmaterial);
body.replaceText("{Kitchen Counter}", kitchencounter);
tempdocfile.saveAndClose();
const pdfcontentblob = tempfile.getAs(MimeType.PDF);
pdffolder.createFile(pdfcontentblob).setName("pdfname");
tempfolder.removeFile(tempfile)
}
该错误会引发,因为某些内容未正确定义。乍一看似乎是因为您在第 35 行引用了 'docfile' 和 'tempfolder',它们未在 createPDF() 函数中定义。 (它们在前面的函数中定义)
不清楚为什么你有这两个函数以及为什么你需要 createPDF 来引用另一个函数,但如果你定义了 'docfile' 和 'tempfolder'(或任何 var 或 const该函数需要)在 createPDF() 中,特别是它应该 运行.
这应该从技术上回答您为什么当前在该行上发生错误的问题,而不涉及您项目的全部需求范围。
不确定您是否已经解决了这个问题,但我认为解决方案可能非常简单...
在您 运行 脚本之前,请更改它,以便您 运行 使用函数 'CreateBulkPDFs' 而不是 'Create PDF'.
您的脚本中有两个函数,您需要使用 运行 按钮旁边顶部的下拉菜单来确保您 运行 正在使用函数 'CreateBulkPDFs'。
如果你尝试 运行 'Create PDF' 常量未定义。
我已经用尽了我所知道的所有资源。观看了几个不同的教程并花了很多时间来尝试使此代码正常工作。
我正在尝试从电子表格行自动创建 PDF。我在每次成功 运行 时保存代码副本。但是,我无法弄清楚我在哪一点触发了这个错误:
类型错误:无法读取未定义的 属性 'makeCopy'(第 35 行,文件“CreatePDF”)
我能够 运行 在使用“let”定义变量时成功地使用 CreatePDF 函数,但是自从尝试使用函数 createbulkpdfs 从电子表格中提取它们以来,我一直无法取得进展。
任何人都可以指出我正确的方向吗?第 35 行注释如下**
//doc id 1rFkh5AmLPNAJ7z1olWBvubn-6Oh8S8_my-AML1lU48I
//temp folder 12ZEXitbgdyOQJiC-pHvshgsBuNOKEKpj
//pdf folder 1eomwcc_UNJhFhvxcoWwamyJUterZtTaB
//let name = "Dan";
//let email = "daniel.sgalia@gmail.com";
//let cost = "100";
//let squarefeet = "2000";
//let flooringmaterial = "Wood";
//let roofingmaterial = "Standing Seam";
//let sidingmaterial = "Lap";
//let kitchencounter = "Granite";
function createbulkpdfs(){
const docfile = DriveApp.getFileById("1rFkh5AmLPNAJ7z1olWBvubn-6Oh8S8_my-AML1lU48I");
const tempfolder = DriveApp.getFolderById("12ZEXitbgdyOQJiC-pHvshgsBuNOKEKpj");
const pdffolder = DriveApp.getFolderById("1eomwcc_UNJhFhvxcoWwamyJUterZtTaB");
const currentsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SFR Calculations");
const data = currentsheet.getRange(2, 1,currentsheet.getLastRow()-1,15).getValues();
data.forEach(row => {
createPDF(row[0],email,cost,squarefeet,flooringmaterial,roofingmaterial,sidingmaterial,kitchencounter,pdfname,docfile,tempfolder,pdffolder)
});
}
function createPDF(name,email,cost,squarefeet,flooringmaterial,roofingmaterial,sidingmaterial,kitchencounter,pdfname,docfile,tempfolder,pdffolder) {
**LINE 35** const tempfile = docfile.makeCopy(tempfolder);
const tempdocfile =DocumentApp.openById(tempfile.getId());
const body = tempdocfile.getBody();
body.replaceText("{Name}", name);
body.replaceText("{Email}", email);
body.replaceText("{Cost Estimate}", cost);
body.replaceText("{Square Feet}", squarefeet);
body.replaceText("{Flooring Material}", flooringmaterial);
body.replaceText("{Roofing Material}", roofingmaterial);
body.replaceText("{Siding Material}", sidingmaterial);
body.replaceText("{Kitchen Counter}", kitchencounter);
tempdocfile.saveAndClose();
const pdfcontentblob = tempfile.getAs(MimeType.PDF);
pdffolder.createFile(pdfcontentblob).setName("pdfname");
tempfolder.removeFile(tempfile)
}
该错误会引发,因为某些内容未正确定义。乍一看似乎是因为您在第 35 行引用了 'docfile' 和 'tempfolder',它们未在 createPDF() 函数中定义。 (它们在前面的函数中定义)
不清楚为什么你有这两个函数以及为什么你需要 createPDF 来引用另一个函数,但如果你定义了 'docfile' 和 'tempfolder'(或任何 var 或 const该函数需要)在 createPDF() 中,特别是它应该 运行.
这应该从技术上回答您为什么当前在该行上发生错误的问题,而不涉及您项目的全部需求范围。
不确定您是否已经解决了这个问题,但我认为解决方案可能非常简单... 在您 运行 脚本之前,请更改它,以便您 运行 使用函数 'CreateBulkPDFs' 而不是 'Create PDF'.
您的脚本中有两个函数,您需要使用 运行 按钮旁边顶部的下拉菜单来确保您 运行 正在使用函数 'CreateBulkPDFs'。 如果你尝试 运行 'Create PDF' 常量未定义。