将 Google Sheet 中的特定单元格下载为 PDF 的应用程序脚本

问题描述 投票:0回答:1

有没有办法使用宏/应用程序脚本选择单元格并将其下载为 PDF? 我对应用程序脚本完全陌生,因为我一直在使用 Excel,并决定更改为 Google Sheets 以实现其连接性。 在 Excel 上,我录制了一个选择单元格然后打印为 PDF 的宏,它可以工作。 但是当我尝试在谷歌表格中记录相同的宏时,它选择单元格,然后结束而不下载。

我的工作表包含多张发票,但它们的格式都相同。 例如,第一张发票位于第 1-50 行(前 50 行),第二张发票位于第 51-100 行(第二个 50 行)。我已附上其外观的屏幕截图。我附上了一张手机屏幕截图,因为桌面版本不可滚动/太短。

桌面屏幕截图 手机屏幕截图

我想要应用程序脚本做的是:-

  1. 选择相应页面(H1 中的按钮 - 单元格 A1 至 G50/H51 中的按钮 - 单元格 A51 至 G100)
  2. 下载 PDF 格式
    • 导出:选定的单元格
    • 纸张尺寸:A4(8.27 英寸 X 11.69 英寸)
    • 页面方向:纵向
    • 比例:适合高度
    • 边距:自定义数字 - 顶部:0.197" - 右:0.197" - 左:0.197 英寸 - 底部:0.197 英寸
    • 不要显示网格线
    • 请勿显示备注
    • 页面顺序:先排序,然后向下
    • 对齐:水平 - 中心 垂直 - 顶部
    • 不要显示任何页眉/页脚
  3. 在我的电脑上下载(不在 Google 云端硬盘中)
  4. 不需要需要重命名(下载后我可以自己重命名)

我希望有好心人可以帮忙制作一个应用程序脚本,我可以将其复制并粘贴到我的文件中。 对于我的 Excel,当我按下按钮时,它会下载工作簿中的所有页面。 我希望在谷歌表格中,我可以下载插入按钮旁边的相应页面。 我正在考虑为每个不同的按钮分配一个单独的脚本,因此请告诉我应该在脚本中更改哪些内容才能使其正常工作。

我找到了一些应用程序脚本解决方案并尝试过,但它们不适用于我的文件。 再说一次,我对应用程序脚本完全陌生,因此我根本不理解它。

这是我尝试过的链接:如何在 Google 表格中使用 .gs 脚本打印工作表/范围? 从谷歌表格中的特定单元格范围创建 PDF 并将其保存到谷歌驱动器

我不知道为什么这些链接的解决方案不起作用。当我尝试运行它们时,没有任何反应,弹出窗口显示“正在运行脚本”,然后 1 秒后显示“脚本结束”,但没有任何变化。没有新的下载或更改。不知道我是否运行错误?或者我应该自己编辑一些东西? 请帮助我,我很迷失。

google-sheets google-apps-script pdf-generation google-sheets-api
1个回答
0
投票

试试这个:

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INVOICES');
  const range = sheet.getRange("J27:N38");
  
  const url = 'https://docs.google.com/spreadsheets/d/' + sheet.getParent().getId() + 
    '/export?format=pdf&' +
    'size=letter&' + 
    'portrait=true&' + 
    'fitw=true&' +
    'gridlines=false&' + 
    'printtitle=false&' + 
    'sheetnames=false&' + 
    'pagenum=false&' + 
    'fzr=false&' + 
    'gid=' + sheet.getSheetId() + 
    '&range=' + range.getA1Notation() + 
    '&top_margin=0.197&' + 
    'right_margin=0.197&' + 
    'left_margin=0.197&' + 
    'bottom_margin=0.197&' + 
    'horizontal_alignment=center&' + 
    'vertical_alignment=top';
  
  const response = UrlFetchApp.fetch(url, {headers: {"Authorization": 'Bearer ' + ScriptApp.getOAuthToken()}});
  const blob = response.getBlob().setName("sheet-export.pdf");
  
  const htmlOutput = HtmlService.createHtmlOutput(`
    <a href="data:application/pdf;base64,${Utilities.base64Encode(blob.getBytes())}" download="sheet-export.pdf" id="downloadLink"></a>
    <script>document.getElementById('downloadLink').click(); google.script.host.close();</script>
  `);
  
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, "Download PDF");
}
© www.soinside.com 2019 - 2024. All rights reserved.