![](/img/trans.png)
[英]How to cross out a row of a spreadsheet (not to remove it !) using google apps script?
[英]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.