有没有办法使用宏/应用程序脚本选择单元格并将其下载为 PDF? 我对应用程序脚本完全陌生,因为我一直在使用 Excel,并决定更改为 Google Sheets 以实现其连接性。 在 Excel 上,我录制了一个选择单元格然后打印为 PDF 的宏,它可以工作。 但是当我尝试在谷歌表格中记录相同的宏时,它选择单元格,然后结束而不下载。
我的工作表包含多张发票,但它们的格式都相同。 例如,第一张发票位于第 1-50 行(前 50 行),第二张发票位于第 51-100 行(第二个 50 行)。我已附上其外观的屏幕截图。我附上了一张手机屏幕截图,因为桌面版本不可滚动/太短。
我想要应用程序脚本做的是:-
我希望有好心人可以帮忙制作一个应用程序脚本,我可以将其复制并粘贴到我的文件中。 对于我的 Excel,当我按下按钮时,它会下载工作簿中的所有页面。 我希望在谷歌表格中,我可以下载插入按钮旁边的相应页面。 我正在考虑为每个不同的按钮分配一个单独的脚本,因此请告诉我应该在脚本中更改哪些内容才能使其正常工作。
我找到了一些应用程序脚本解决方案并尝试过,但它们不适用于我的文件。 再说一次,我对应用程序脚本完全陌生,因此我根本不理解它。
这是我尝试过的链接:如何在 Google 表格中使用 .gs 脚本打印工作表/范围? 从谷歌表格中的特定单元格范围创建 PDF 并将其保存到谷歌驱动器
我不知道为什么这些链接的解决方案不起作用。当我尝试运行它们时,没有任何反应,弹出窗口显示“正在运行脚本”,然后 1 秒后显示“脚本结束”,但没有任何变化。没有新的下载或更改。不知道我是否运行错误?或者我应该自己编辑一些东西? 请帮助我,我很迷失。
试试这个:
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");
}