You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:21:01