如何用Google Appscript将导出PDF文件名设为指定单元格值?
问题解决:将Google表格导出PDF的文件名设为单元格G2的值
原代码的问题在于你直接把Range对象赋值给了pdfName,而没有获取单元格的实际内容,导致PDF文件名显示为"Range"。另外根据你最后确认的需求,我们需要从G2单元格读取文件名,以下是修正后的完整代码:
function onOpen() { var submenu = [{name:"Save PDF", functionName:"generatePdf"}]; SpreadsheetApp.getActiveSpreadsheet().addMenu('Export', submenu); } function generatePdf() { var sourceSpreadsheet = SpreadsheetApp.getActive(); var sheetName = sourceSpreadsheet.getActiveSheet().getName(); var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName); // 关键修改:获取G2单元格的实际值,而非Range对象 var pdfName = sourceSheet.getRange("G2").getValue(); var parents = DriveApp.getFileById(sourceSpreadsheet.getId()).getParents(); var folder = parents.hasNext() ? parents.next() : DriveApp.getRootFolder(); var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder)); // 删除无关工作表 var sheets = destSpreadsheet.getSheets(); for (var i = 0; i < sheets.length; i++) { if (sheets[i].getSheetName() !== sheetName){ destSpreadsheet.deleteSheet(sheets[i]); } } // 复制原工作表内容到临时表 var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns()); var sourceValues = sourceRange.getValues(); var destSheet = destSpreadsheet.getSheets()[0]; var destRange = destSheet.getRange(1, 1, sourceSheet.getMaxRows(), sourceSheet.getMaxColumns()); destRange.setValues(sourceValues); // 生成PDF并设置正确文件名 var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName); folder.createFile(theBlob); // 删除临时表 DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true); }
关键修改说明:
- 获取单元格值:将原代码中获取Range对象的逻辑替换为直接调用
getValue(),拿到G2单元格的实际内容(包括公式计算后的结果)。 - 优化复制范围:调整临时表的目标范围,确保只复制原工作表的有效行数,避免多余空白行被引入。
- 简化代码结构:将文件夹判断改为三元表达式,让代码更简洁易读。
内容的提问来源于stack exchange,提问作者TimM
相关产品推荐
相关产品推荐

