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

如何将Google表格单元格值设为导出PDF的打印标题而非URL

解决方案

实现逻辑:直接调用Google Sheets的PDF导出接口时默认会使用文档/工作表名作为下载文件名,要自定义标题需要将导出内容转为Blob后通过HTML5的download属性手动指定文件名,具体修改代码如下:

步骤1:修改Google Apps Script代码

// 定义你要作为PDF标题的单元格位置,示例为A1,可按需修改
const TITLE_CELL = "A1";

function printSelectedRange() {
  SpreadsheetApp.flush();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formS = ss.getActiveSheet();
  var range = formS.setActiveRange(formS.getRange("B7:J58"));

  // 读取指定单元格内容作为PDF标题,同时清理文件名非法字符
  var pdfTitle = formS.getRange(TITLE_CELL).getValue().toString().replace(/[<>:"/\\|?*]/g, '').trim();
  // 兜底标题,避免单元格为空时出错
  pdfTitle = pdfTitle || "PurchaseRequest";

  var gid = formS.getSheetId();
  var printRange = objectToQueryString({
    'c1': range.getColumn() - 1 ,
    'r1': range.getRow() - 1,
    'c2': range.getColumn() + range.getWidth() -1 ,
    'r2': range.getRow() + range.getHeight() 
  });
  var url = ss.getUrl().replace(/edit$/, '') + 'export?format=pdf' + PDF_OPTS + printRange + "&gid=" + gid;

  var htmlTemplate = HtmlService.createTemplateFromFile('js');
  htmlTemplate.url = url;
  // 向模板传递授权令牌和PDF标题
  htmlTemplate.token = ScriptApp.getOAuthToken();
  htmlTemplate.title = pdfTitle;
  SpreadsheetApp.getUi().showModalDialog(htmlTemplate.evaluate().setHeight(10).setWidth(400),'Purchase Request by ');
}

function objectToQueryString(obj) {
  return Object.keys(obj).map(function(key) {
    return Utilities.formatString('&%s=%s', key, obj[key]);
  }).join('');
}

步骤2:修改HTML模板代码

<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <script>
      (async () => {
        // 带授权请求PDF内容
        const res = await fetch('<?=url?>', {
          headers: {
            'Authorization': 'Bearer <?=token?>'
          }
        });
        // 转为Blob对象
        const blob = await res.blob();
        // 创建临时下载链接
        const a = document.createElement('a');
        a.href = URL.createObjectURL(blob);
        // 指定下载文件名
        a.download = '<?=title?>.pdf';
        document.body.appendChild(a);
        a.click();
        // 清理临时元素
        a.remove();
        URL.revokeObjectURL(a.href);
        google.script.host.close();
      })();
    </script>
  </body>
</html>

自定义调整说明

  • 如需修改标题对应的单元格,直接修改代码开头TITLE_CELL的取值即可,比如要取C3单元格就改为const TITLE_CELL = "C3"
  • 标题会自动清理文件名不允许的特殊字符,单元格为空时会默认使用PurchaseRequest作为文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:18:03