使用 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' 常量未定义。