如何通过代码移除Google Sheets转PDF打印底部的空白行?
解决Google Sheet导出PDF时动态过滤空白行的问题
原脚本可将指定Google Sheet保存为PDF到Google Drive并覆盖现有文件以保留分享链接,但导出的PDF会包含底部大量空白行,且静态过滤无法适配列表长度的动态变化(列表缩短时仍有空白,变长时新增行无法被打印)。需要修改脚本,实现导出前自动仅包含B列非空值的行。
修改后的完整脚本
function updatePDF2() { var folderId = 'google_drive_folder_id'; var pdfName = 'filename.pdf'; var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('PDF_AVAIL_TOOL'); var folder = DriveApp.getFolderById(folderId); var files = folder.getFilesByName(pdfName); var existingFileId = files.hasNext() ? files.next().getId() : Drive.Files.create({ name: pdfName, mimeType: MimeType.PDF, parents: [folderId] }).id; // 动态获取B列最后一个非空行的行号 var lastRow = sheet.getRange('B:B').getValues().filter(String).length; // 假设表头在第1行,打印范围为A1到最后一行的所有列(可根据实际调整列范围) var printRange = 'A1:' + sheet.getRange(lastRow, sheet.getLastColumn()).getA1Notation(); var url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?exportFormat=pdf&format=pdf'; var options = '&size=letter' + '&portrait=true' + '&scale=2' + '&top_margin=0.25' + '&bottom_margin=0.25' + '&left_margin=0.25' + '&right_margin=0.25' + '&sheetnames=false&printtitle=false&pagenumbers=true&gridlines=false&fzr=true' + '&gid=' + sheet.getSheetId() + '&range=' + encodeURIComponent(printRange); // 添加打印范围参数 var token = ScriptApp.getOAuthToken(); var headers = { 'Authorization': 'Bearer ' + token, 'muteHttpExceptions': true }; var response = UrlFetchApp.fetch(url + options, { headers: headers }); if (response.getResponseCode() == 200) { var blob = response.getBlob().setName(pdfName); Drive.Files.update({}, existingFileId, blob); DriveApp.getFileById(existingFileId).setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); Logger.log('PDF updated successfully and permissions are set.'); } else { Logger.log('Failed to fetch the PDF: ' + response.getContentText()); } }
关键改动说明
- 动态确定打印范围:通过
sheet.getRange('B:B').getValues().filter(String).length获取B列最后一个非空行的行号,彻底摆脱静态范围的局限性。 - 添加打印范围参数:在导出URL的
options中加入&range=' + encodeURIComponent(printRange),指定仅导出从A1到最后一行所有列的内容,确保PDF只包含有效数据行。 - 适配动态列表:无论列表变长或缩短,脚本都会自动识别B列的有效数据范围,导出的PDF不会出现多余空白或遗漏新增行。
如果你的表头不在第1行,或者需要限定特定列范围,只需调整printRange的起始行和列范围即可(例如表头在第2行则改为A2:开头,限定到D列则改为A1:D + 最后行号)。
内容的提问来源于stack exchange,提问作者cliff.kujala
相关产品推荐
相关产品推荐

