首页 > 解决方案 > 使用 Google Apps 脚本使用 Gdoc 模板将电子表格行数据保存为 PDF

问题描述

我已经用尽了所有我知道的资源。看了几个不同的教程,花了很多时间试图让这段代码工作。

我正在尝试从电子表格行自动创建 PDF。每次成功运行时,我都会保存代码副本。但是,我无法弄清楚我在什么时候触发了这个错误:

TypeError:无法读取未定义的属性“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)


}

标签: javascriptpdfgoogle-apps-scriptgoogle-sheetsautomation

解决方案


该错误会抛出,因为某些内容未正确定义。一目了然,因为在第 35 行您引用了 createPDF() 函数中未定义的“docfile”和“tempfolder”。(它们在前面的函数中定义)

不清楚为什么你有这两个函数以及为什么你需要 createPDF 来引用另一个函数,但是如果你在 createPDF 中定义了“docfile”和“tempfolder”(或该函数中需要的任何 var 或 const),它就会出现() 特别是它应该运行。

从技术上讲,这应该回答您为什么当前在该行上发生错误的问题,而无需深入了解您项目的全部需求。


推荐阅读