繁体   English   中英

使用 Google Apps 脚本使用 Gdoc 模板将电子表格行数据保存到 PDF

[英]Save spreadsheet row data to PDF using Gdoc template using Google Apps Script

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

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

TypeError:无法读取未定义的属性“makeCopy”(第 35 行,文件“CreatePDF”)

使用“let”定义变量时,我能够成功运行 CreatePDF function,但由于尝试使用 function: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 行您引用了 createPDF() function 中未定义的“docfile”和“tempfolder”。 (它们在前面的函数中定义)

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

从技术上讲,这应该可以回答您为什么当前在该线路上发生错误的问题,而无需深入了解您项目的完整 scope 需求。

不确定您是否已经解决了这个问题,但我认为解决方案可能非常简单......在运行脚本之前,请对其进行更改,以便您运行 function 'CreateBulkPDFs'而不是'Create PDF'。

您的脚本中有两个函数,您需要使用运行按钮旁边顶部的下拉菜单来确保您正在运行 function 'CreateBulkPDFs'。 如果您尝试运行“创建 PDF”,则未定义常量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM