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

使用Google Apps Script合并指定谷歌表格工作表为PDF出错并需修改

解决方案

修复500错误的核心原因

原代码构建PDF导出URL时错误使用HTML实体&代替URL参数分隔符&,导致请求无效触发500错误;同时存在重复调用folder.createFile(blob)的冗余操作,需移除。

实现指定工作表范围合并为单个PDF的代码

以下代码通过创建临时工作表,将两个指定范围的内容复制到临时表并插入分页符,最终导出为单个PDF,完成后自动删除临时表:

function mergeSheetsToPdf(pdfName) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var folder = DriveApp.getFolderById('1t6ns346GNX_gP-uGkwE43egGhTCaWgKO');
  pdfName = pdfName || spreadsheet.getName();
  
  // 获取源工作表
  var sheet1 = spreadsheet.getSheetByName('Sheet1');
  var sheet2 = spreadsheet.getSheetByName('Sheet2');
  
  // 创建临时工作表
  var tempSheet = spreadsheet.insertSheet('TempSheet');
  
  try {
    // 复制Sheet1的A2:Q28到临时表A1起始位置
    var range1 = sheet1.getRange('A2:Q28');
    range1.copyTo(tempSheet.getRange('A1'), SpreadsheetApp.CopyPasteType.PASTE_VALUES_AND_FORMATTING);
    
    // 在第28行前插入分页符(确保两个内容分属不同页面)
    tempSheet.insertPageBreak(28);
    
    // 复制Sheet2的A1:I27到临时表A28起始位置
    var range2 = sheet2.getRange('A1:I27');
    range2.copyTo(tempSheet.getRange('A28'), SpreadsheetApp.CopyPasteType.PASTE_VALUES_AND_FORMATTING);
    
    // 导出临时表为PDF
    var pdfBlob = exportSheetToPdf(spreadsheet.getId(), tempSheet.getSheetId(), pdfName);
    
    // 保存PDF到指定文件夹
    folder.createFile(pdfBlob);
  } finally {
    // 无论是否出错,都删除临时工作表
    spreadsheet.deleteSheet(tempSheet);
  }
}

function exportSheetToPdf(spreadsheetId, sheetId, pdfName) {
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var url_base = spreadsheet.getUrl().replace(/edit$/, '');
  
  // 正确构建导出URL,使用&作为参数分隔符
  var url_ext = 'export?exportFormat=pdf&format=pdf'
    + '&gid=' + sheetId
    + '&size=letter'
    + '&portrait=true'
    + '&fitw=true'
    + '&sheetnames=false&printtitle=false&pagenumbers=false'
    + '&gridlines=false'
    + '&fzr=false';
  
  var options = {
    headers: {
      'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
    },
    muteHttpExceptions: true // 启用以便调试错误
  };
  
  var response = UrlFetchApp.fetch(url_base + url_ext, options);
  
  // 检查请求是否成功
  if (response.getResponseCode() !== 200) {
    throw new Error('PDF导出失败: ' + response.getContentText());
  }
  
  return response.getBlob().setName(pdfName + '.pdf');
}

// 测试函数
function testMerge() {
  mergeSheetsToPdf("123");
}

使用说明

  1. 确保folder.createFile中的文件夹ID为你需要保存PDF的目标文件夹ID。
  2. 运行testMerge函数即可生成包含指定范围内容的单个PDF。
  3. 临时工作表会自动删除,不会残留到原表格中。

内容的提问来源于stack exchange,提问作者user12736831

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:52:01