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

使用Google Apps Script打印Google Sheets单元格范围失败求助

Google Sheets脚本导出指定单元格范围为PDF失败的修复方案

问题说明

在Google Sheets中为按钮绑定Google Apps Script,目标是导出「Impresión de Etiquetas」工作表的A16:G29单元格范围为PDF,但生成的文件无法正常预览和下载,错误提示:

无法获取文件预览,您可能处于离线状态或网络连接受限,请尝试下载文档。

原代码如下:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("Impresión de Etiquetas");
var rangeToExport  = sheet.getRange("A16:G29");

// Configurar la impresión de la hoja
var gid = sheet.getSheetId();
var options = {
  'size': 'A4',
  'portrait': true,
  'fitw': true,
  'sheetnames': false,
  'printtitle': false,
  'pagenum': 'UNDEFINED',
  'gridlines': true
};

// Obtener los valores del rango
var values = rangeToExport.getValues();

// Crear un archivo PDF a partir de los valores
var pdfFile = DriveApp.createFile("ImpresionEtiquetas.pdf", values.join("\n"), "application/pdf");

// Abre el PDF para imprimirlo manualmente
var pdfUrl = pdfFile.getUrl();
var htmlOutput = HtmlService.createHtmlOutput('<a href="' + pdfUrl + '" target="_blank">Haga clic aquí para abrir el PDF y luego imprímalo manualmente</a>');
SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Impresión de Etiquetas.pdf');

错误原因

原代码的核心问题是将单元格文本值直接拼接后强行标记为PDF文件,实际内容是纯文本,并非符合规范的PDF格式,导致系统无法识别和预览。

修复后的代码

function printEtiquetas() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName("Impresión de Etiquetas");
  var rangeToExport = sheet.getRange("A16:G29");
  
  // 获取表格ID、工作表ID及目标范围的行列参数
  var ssId = spreadsheet.getId();
  var gid = sheet.getSheetId();
  var startRow = rangeToExport.getRow();
  var endRow = startRow + rangeToExport.getNumRows() - 1;
  
  // 构建Google Sheets官方导出PDF的URL及参数
  var exportUrl = "https://docs.google.com/spreadsheets/d/" + ssId + "/export?";
  var params = {
    exportFormat: "pdf",
    format: "pdf",
    gid: gid,
    range: "A" + startRow + ":G" + endRow,
    size: "A4",
    portrait: true,
    fitw: true,
    sheetnames: false,
    printtitle: false,
    pagenum: "UNDEFINED",
    gridlines: true,
    fzr: false
  };
  
  // 拼接参数为URL字符串
  var queryString = Object.keys(params).map(key => `${key}=${encodeURIComponent(params[key])}`).join("&");
  var fullUrl = exportUrl + queryString;
  
  // 携带OAuth令牌请求导出的PDF内容
  var token = ScriptApp.getOAuthToken();
  var response = UrlFetchApp.fetch(fullUrl, {
    headers: { 'Authorization': `Bearer ${token}` }
  });
  
  // 创建标准PDF文件并弹出打印入口
  var pdfBlob = response.getBlob();
  var pdfFile = DriveApp.createFile(pdfBlob).setName("ImpresionEtiquetas.pdf");
  
  var pdfUrl = pdfFile.getUrl();
  var htmlOutput = HtmlService.createHtmlOutput(`<a href="${pdfUrl}" target="_blank">点击这里打开PDF并手动打印</a>`);
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, '打印标签.pdf');
}

修复要点

  • 使用Google Sheets官方导出接口生成符合规范的PDF文件
  • 通过OAuth令牌验证权限,确保能正确获取导出内容
  • 精准指定目标单元格范围,避免导出多余内容
  • 保留原有的打印格式配置(A4纵向、显示网格线等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:41:13