Google apps script 是否有办法将电子表格的多个选项卡(但不是全部)打印为单个pdf?
我做了一些研究,但还没有找到任何方法。尝试按照Andrew Roberts在此处解释的方法将电子表格(或特定选项卡)转换为pdf: 查看评论,他建议添加以下代码,我将其放入另一个函数中:Google apps script 是否有办法将电子表格的多个选项卡(但不是全部)打印为单个pdf?,google-apps-script,pdf-generation,Google Apps Script,Pdf Generation,我做了一些研究,但还没有找到任何方法。尝试按照Andrew Roberts在此处解释的方法将电子表格(或特定选项卡)转换为pdf: 查看评论,他建议添加以下代码,我将其放入另一个函数中: function printtwopdfs() { var sheetNames = ["Table1,"Table2"] sheetNames.forEach(function(sheetName) { convertSpreadsheetToPdf(TEST_EMAIL, "xxxxxx
function printtwopdfs() {
var sheetNames = ["Table1,"Table2"]
sheetNames.forEach(function(sheetName) {
convertSpreadsheetToPdf(TEST_EMAIL, "xxxxxx", sheetName,
"pdfteste")
})}
但我得到的是每一张单独打印成一份pdf的
隐藏除我想要的选项卡之外的所有选项卡并整体打印电子表格对我来说不是一个选项,因为它有太多的选项卡(大约15个)。除此之外,我不太可能将所选的工作表复制到新的电子表格中,因为该功能运行时间太长,除非我可以很快完成。有没有关于如何继续的想法?如果我理解正确:
- 您希望在单个PDF中打印部分但不是全部工作表
- 您可以通过隐藏不需要的工作表并打印完整的电子表格(只有未隐藏的工作表才能打印)来实现这一点
- 每次要打印PDF时,隐藏和显示不需要的工作表是很不舒服的,特别是当有很多工作表时
功能转换电子表格TopDF(电子邮件、电子表格ID、SheetStopPrint){
var ss=电子表格应用程序openById(电子表格ID);
//获取电子表格中所有工作表的名称:
var allSheets=ss.getSheets().map(函数(工作表){
return sheet.getName();
});
//获取要忽略的图纸的名称:
var sheetsToHide=allSheets.filter(函数(sheetName){
返回sheetsToPrint.indexOf(sheetName)=-1;
});
//隐藏要忽略的图纸:
sheetsToHide.forEach(函数(sheetName){
var sheet=ss.getSheetByName(sheetName);
sheet.hideSheet();
})
var pdfName=ss.getName();
var parents=DriveApp.getFileById(电子表格ID).getParents();
var folder=parents.hasNext()?parents.next():DriveApp.getRootFolder();
var url_base=ss.getUrl().replace(/edit$/,“”);
var url_ext='export?exportFormat=pdf&format=pdf'//导出为pdf
//打印整个电子表格(仅未隐藏的表格):
+“&id=”+电子表格id
//以下参数是可选的。。。
+'&size=A4'//纸张大小
+“&trait=false”//方向,横向为false
+“&fitw=true”//适合宽度,实际尺寸为false
+“&sheetnames=false&printtitle=false&PageNumber=false”//隐藏可选的页眉和页脚
+“&gridlines=false”//隐藏网格线
+“&fzr=false”;//不要在每页上重复行标题(冻结行)
变量选项={
标题:{
“授权”:“承载者”+ScriptApp.getOAuthToken(),
}
}
var response=UrlFetchApp.fetch(url\u base+url\u ext,选项);
var blob=response.getBlob().setName(pdfName+'.pdf');
folder.createFile(blob);
如果(电子邮件){
var mailpoptions={
附件:blob
}
MailApp.sendmail(
电子邮件,
“这是一个名为“+pdfName”的文件,
“如果您有任何问题或意见,请告诉我。”,
邮件选项);
}
//显示被忽略的图纸:
sheetsToHide.forEach(函数(sheetName){
var sheet=ss.getSheetByName(sheetName);
sheet.showSheet();
})
}
此函数接受电子邮件
、电子表格ID
和由要打印的图纸名称组成的数组作为参数。一个可能的电话可能是这样的:
convertSpreadsheetToPdf(“您的-email@your-域“,”您的电子表格id“,[“Sheet1”,“Sheet2”,“Sheet5”])
为了实现这一点,我对这段代码进行了一些简化(PDF的名称始终是电子表格的名称,并且您必须始终提供电子表格id),但是可以随时恢复这些更改
参考:
- 您希望通过从Google电子表格中选择工作表来创建PDF文件。
- 谷歌电子表格有15张表格
- 例如,您希望选择两张“Table1”和“Table2”,并希望将它们创建为一个PDF文件。然后,PDF文件将作为电子邮件发送
- 您希望降低实现上述目标的过程成本。
- 您希望在20秒内完成脚本的运行
- 您希望使用谷歌应用程序脚本实现这一点
sheetNames
、email
和spreadsheetId
的变量。并运行函数printtowdfs()
注:
- 在我的环境中,当上面的脚本用于Google电子表格(包括20张以单元格为单位的表)时,获得了大约5秒的处理时间。但我不确定这是否适用于你的实际情况。我为此道歉
隐藏所有选项卡,除了I
function printtwopdfs() {
var sheetNames = ["Table1,"Table2"]
sheetNames.forEach(function(sheetName) {
convertSpreadsheetToPdf(TEST_EMAIL, "xxxxxx", sheetName,
"pdfteste")
})}
function convertSpreadsheetToPdf(email, spreadsheetId, pdfName) {
var spreadsheet = spreadsheetId ? SpreadsheetApp.openById(spreadsheetId) : SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheetId ? spreadsheetId : spreadsheet.getId();
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
+ '&id=' + spreadsheetId
+ '&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);
}
}
// Please run this function.
function printtwopdfs() {
var sheetNames = ["Table1", "Table2"];
var email = "###"; // Please set email address.
var spreadsheetId = "###"; // Please set Spreadsheet ID.
// Hide sheets.
var allSheets = SpreadsheetApp.openById(spreadsheetId).getSheets();
var hiddenResource = allSheets.map(function(s) {
var obj = {updateSheetProperties: {properties: {sheetId: s.getSheetId(), hidden: true}, fields: "hidden"}};
if (sheetNames.indexOf(s.getSheetName()) != -1) obj.updateSheetProperties.properties.hidden = false;
return obj;
});
Sheets.Spreadsheets.batchUpdate({requests: hiddenResource}, spreadsheetId);
// Create PDF file.
convertSpreadsheetToPdf(email, spreadsheetId, "pdfteste");
// Show all sheets.
var showResource = allSheets.map(function(s) {return {updateSheetProperties: {properties: {sheetId: s.getSheetId(), hidden: false}, fields: "hidden"}}});
Sheets.Spreadsheets.batchUpdate({requests: showResource}, spreadsheetId);
}