【发布时间】:2020-02-05 03:45:32
【问题描述】:
我进行了一些研究,但还没有找到任何方法来做到这一点。尝试按照 Andrew Roberts 的解释在这里 http://www.andrewroberts.net/2017/03/apps-script-create-pdf-multi-sheet-google-sheet/ 将电子表格(或特定选项卡)转换为 pdf:
function convertSpreadsheetToPdf(email, spreadsheetId, sheetName, pdfName) {
var spreadsheet = spreadsheetId ? SpreadsheetApp.openById(spreadsheetId) :
SpreadsheetApp.getActiveSpreadsheet();
spreadsheetId = spreadsheetId ? spreadsheetId : spreadsheet.getId()
var sheetId = sheetName ? spreadsheet.getSheetByName(sheetName).getSheetId() : null;
var pdfName = pdfName ? pdfName : spreadsheet.getName();
var parents = DriveApp.getFileById(spreadsheetId).getParents();
var folder = parents.hasNext() ? parents.next() : DriveApp.getRootFolder();
var url_base = spreadsheet.getUrl().replace(/edit$/,'');
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
// Print either the entire Spreadsheet or the specified sheet if optSheetId is provided
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
// following parameters are optional...
+ '&size=A4' // paper size
+ '&portrait=false' // orientation, false for landscape
+ '&fitw=true' // fit to width, false for actual size
+ '&sheetnames=false&printtitle=false&pagenumbers=false' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false'; // do not repeat row headers (frozen rows) on each page
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
}
}
var response = UrlFetchApp.fetch(url_base + url_ext, options);
var blob = response.getBlob().setName(pdfName + '.pdf');
folder.createFile(blob);
if (email) {
var mailOptions = {
attachments:blob
}
MailApp.sendEmail(
email,
"Here is a file named " + pdfName,
"Please let me know if you have any questions or comments.",
mailOptions);
}
查看 cmets,他建议添加以下代码,我将其放入另一个函数中:
function printtwopdfs() {
var sheetNames = ["Table1,"Table2"]
sheetNames.forEach(function(sheetName) {
convertSpreadsheetToPdf(TEST_EMAIL, "xxxxxx", sheetName,
"pdfteste")
})}
但我得到的是 每张 单独打印为一个 pdf 的工作表。
隐藏除我想要的选项卡之外的所有选项卡并打印整个电子表格对我来说不是一个选项,因为它有太多选项卡(大约 15 个)。除此之外,我不太可能将选定的工作表复制到新的电子表格中,因为该功能需要很长时间才能运行,除非我能很快地做到这一点。关于如何进行的任何想法?
【问题讨论】:
-
我能问一下你的目标吗? 1.关于
Hidding all tabs except the ones I want and printing the spreadsheet as a whole isn't an option for me, since it has too many tabs (about 15).,标签页多的时候,你有什么问题? 2.关于take too long to run,请问这个处理时间? 3. 可以问一下你想要脚本的处理时间吗? -
@Tanaike 我在一家资产管理公司工作,由于某些内部原因,我们正在从 excel 迁移到 Google 表格,并且必须从我的电子表格中打印许多投资者报告,但并非此电子表格的所有选项卡都需要要打印。 1. 隐藏所有选项卡然后打印电子表格可能不合适,因为我仍然需要使用相同的功能通过电子邮件发送报告(PDF 格式)。据我所知,我必须实现一个循环结构,并且由于它有太多选项卡,所以运行时间太长;
-
2.遍历所有选项卡的循环大约需要 1 分钟以上; 3. 我想在 20 秒或更短的时间内运行这样的功能,有没有可能?
-
感谢您的回复。根据您的问题和回复,我提出了一个修改后的脚本作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
标签: google-apps-script pdf-generation