【问题标题】:Export a range as a PDF in Google Apps Script在 Google Apps 脚本中将范围导出为 PDF
【发布时间】:2015-09-21 20:24:32
【问题描述】:

我已经到处搜索了一些可以完成我想要的代码行,但是我对 google 应用程序脚本的工作方式太不熟悉了。我只用过 Microsoft excel 编码,虽然我并没有完全迷失,但我仍然很迷茫。

我正在寻找可以选择一个范围的代码,然后“下载为..”选择为 PDF,适合宽度,纵向,无网格。理想情况下,这个 PDF 可以发送到我桌面上的特定文件夹,但我不知道应用程序脚本是否支持。

我找到了(我认为)确定宽度、纵向、无网格所需的方法。我所做的所有其他搜索都将整个工作表转换为 PDF 并通过电子邮件发送,这不是我想要做的,我找不到要删除这些示例代码的哪些部分,因为看起来 PDF 被识别为网络地址。任何帮助将不胜感激。

【问题讨论】:

  • 查看您问题的新答案。

标签: pdf google-apps-script


【解决方案1】:

可以从您的 Google 表格中导出一个范围,而无需隐藏表格选项卡、行和列,也无需创建临时的新电子表格。

function exportRangeToPDf(range) {
  var blob,exportUrl,options,pdfFile,response,sheetTabNameToGet,sheetTabId,ss,ssID,url_base;

  range = range ? range : "C4:D4";//Set the default to whatever you want

  sheetTabNameToGet = "Sheet1";//Replace the name with the sheet tab name for your situation
  ss = SpreadsheetApp.getActiveSpreadsheet();//This assumes that the Apps Script project is bound to a G-Sheet
  ssID = ss.getId();
  sh = ss.getSheetByName(sheetTabNameToGet);
  sheetTabId = sh.getSheetId();
  url_base = ss.getUrl().replace(/edit$/,'');

  //Logger.log('url_base: ' + url_base)

  exportUrl = url_base + 'export?exportFormat=pdf&format=pdf' +

    '&gid=' + sheetTabId + '&id=' + ssID +
    '&range=' + range + 
    //'&range=NamedRange +
    '&size=A4' +     // paper size
    '&portrait=true' +   // orientation, false for landscape
    '&fitw=true' +       // fit to width, false for actual size
    '&sheetnames=true&printtitle=false&pagenumbers=true' + //hide optional headers and footers
    '&gridlines=false' + // hide gridlines
    '&fzr=false';       // do not repeat row headers (frozen rows) on each page

  //Logger.log('exportUrl: ' + exportUrl)

  options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
    }
  }

  options.muteHttpExceptions = true;//Make sure this is always set

  response = UrlFetchApp.fetch(exportUrl, options);

  //Logger.log(response.getResponseCode())

  if (response.getResponseCode() !== 200) {
    console.log("Error exporting Sheet to PDF!  Response Code: " + response.getResponseCode());
    return;

  }
  
  blob = response.getBlob();

  blob.setName('AAA_test.pdf')

  pdfFile = DriveApp.createFile(blob);//Create the PDF file
  //Logger.log('pdfFile ID: ' +pdfFile.getId())
}

已使用多种策略将 Google 表格的一部分导出为 PDF。

  • 创建一个仅包含所需内容的新电子表格文件
  • 创建一个新的工作表选项卡,将内容放在工作表选项卡中并隐藏任何 其他工作表标签,隐藏不需要的行和列
  • 使用范围设置构建下载 URL
    • 使用范围地址
    • 使用命名范围 - &gid=sheetId&range=NamedRange
  • 将内容导出到 Google Doc 并从 Google Doc 创建 PDF
  • 将 G-Sheet 内容与模板文件合并,并从 模板文件。
  • 从工作表中获取一系列内容,将其转换为 HTML 并使用 用于创建 PDF 文件的 HTML

我会使用构建下载 URL 的方法,下载 URL 包含范围。

【讨论】:

    【解决方案2】:

    似乎没有直接的方法可以在 Google Apps 脚本中将 Range 转换为 PDF (blob)。您可以做的最好的事情是将范围值复制到空白电子表格,应用您的格式,然后导出该表格。

    您可以将 PDF 写入 Google Drive 上的文件夹,然后使用计算机上的 Drive 软件将该文件夹同步到桌面上的文件夹,完成最后一部分。

    我没有可以方便地执行此操作的 sn-p 代码,但这里是相关文档链接:

    https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues

    https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#create(String)

    https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object)

    https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getAs(String)

    https://developers.google.com/apps-script/reference/drive/drive-app#createFile(String,String,String)

    【讨论】:

    • 非常感谢卡梅伦,这将使我向前迈出一大步。我会试着用你给我的信息写一些代码,如果我成功了,我会发布结果。再次感谢您。
    • 有一种方法可以将一个工作表选项卡的一部分导出为 PDF 文件。查看新答案。
    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多