使用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
相关产品推荐
相关产品推荐

