仅生成我的电子表格的一张 PDF
Posted
技术标签:
【中文标题】仅生成我的电子表格的一张 PDF【英文标题】:Generate PDF of only one sheet of my spreadsheet 【发布时间】:2018-08-18 05:42:14 【问题描述】:我需要一个脚本,它只用我的一张电子表格创建一个 PDF。 我目前有一个生成 PDF 的脚本,但它使用整个文件。 我无法将值复制到另一个文件,因为我需要导出的工作表是从另一个工作表中提取数据的图形。 你可以帮帮我吗?谢谢。
function myFunction()
var archivo = SpreadsheetApp.getActive();
var hoja = archivo.getSheetByName("Graficos 2");
var id = archivo.getId();
var archivoId = DriveApp.getFileById(id);
var archivoBlob = archivoId.getBlob();
var carpetaId = archivoId.getParents();
var contenidoPDF = archivo.getAs(MimeType.PDF);
carpetaId.next().createFile(contenidoPDF);
【问题讨论】:
【参考方案1】:这个问题已经或多或少地解决了here。
简而言之,可以修改Url queryString中的导出参数来获取特定的sheet。然后将 blob 转换为 pdf。
这是相同的代码,基本代码来自here
function emailSpreadsheetAsPDF()
// Send the PDF of the spreadsheet to this email address
var email = "Your Email Id";
// Get the currently active spreadsheet URL (link)
// Or use SpreadsheetApp.openByUrl("<<SPREADSHEET URL>>");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("<Your Sheet name>")
// Subject of email message
var subject = "PDF generated from sheet " + sheet.getName();
// Email Body can be html too with your logo image - see ctrlq.org/html-mail
var body = "Install the <a href='http://www.labnol.org/email-sheet'>Email Spreadsheet add-on</a> for one-click conversion.";
// Base URL
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());
/* Specify PDF export parameters
From: https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579
*/
var url_ext = 'exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
+ '&size=letter' // paper size legal / letter / A4
+ '&portrait=false' // orientation, false for landscape
+ '&fitw=true&source=labnol' // fit to page width, false for actual size
+ '&sheetnames=false&printtitle=false' // hide optional headers and footers
+ '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
+ '&fzr=false' // do not repeat row headers (frozen rows) on each page
+ '&gid='; // the sheet's Id
var token = ScriptApp.getOAuthToken();
//make an empty array to hold your fetched blobs
var blobs;
// Convert your specific sheet to blob
var response = UrlFetchApp.fetch(url + url_ext + sheet.getSheetId(),
headers:
'Authorization': 'Bearer ' + token
);
//convert the response to a blob and store in our array
blobs = response.getBlob().setName(sheet.getName() + '.pdf');
// Define the scope
Logger.log("Storage Space used: " + DriveApp.getStorageUsed());
// If allowed to send emails, send the email with the PDF attachment
if (MailApp.getRemainingDailyQuota() > 0)
GmailApp.sendEmail(email, subject, body,
htmlBody: body,
attachments:[blobs]
);
编辑:合并特定工作表并将其转换为pdf。
首先,您必须获取要合并到 pdf 中的所有工作表的工作表对象
var sheet2 = ss.getSheetByName("<Your Sheet name>")
var sheet3 = ss.getSheetByName("<Your Sheet name>")
然后将每张工作表的sheetId传递给%EE%B8%80
分隔的URL查询,像这样
url += url_ext + sheet.getSheetId()+ "%EE%B8%80"+sheet2.getSheetId()+ "%EE%B8%80"+sheet3.getSheetId()
var response = UrlFetchApp.fetch(url,
headers:
'Authorization': 'Bearer ' + token
);
【讨论】:
为什么要使用 GmailApp 和 MailApp?只需 MailApp 就足够了,并且避免用户认为您的脚本想要查看他们的收件箱:D 非常感谢!我已经查看了该页面,但我没有设法以正确的方式修改脚本。现在,我还有 2 个问题如果您想在 PDF 中执行此操作,保存 3 张纸,可以使用相同的脚本完成吗?第二个问题。这行代码是做什么的: // Base URL var url = "docs.google.com/spreadsheets/d/SS_ID/…", ss.getId ()); @SantiagoRuffino 您能否重新表述您的问题,不确定您在问什么?谢谢。 如果我想使用相同的脚本生成包含 3 张电子表格的 PDF。脚本的必要修改是什么? @杰克布朗 @SantiagoRuffino 我已经更新了答案,应该可以为您的查询提供解决方案以上是关于仅生成我的电子表格的一张 PDF的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式填写和获取 Excel 电子表格的 PDF 输出?
仅通过 Google Apps 脚本值修改 Google 电子表格
如何将宏应用于 Google 表格中一个电子表格中的所有表格