Last active
February 9, 2025 15:53
-
-
Save andrewroberts/26d460212874cdd3f645b55993942455 to your computer and use it in GitHub Desktop.
Convert a multi-sheet Google Spreadsheet into a PDF, with option to email it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Save spreadsheet as a PDF | |
* | |
* Based on Dr.Queso's answer in http://stackoverflow.com/questions/30367547/convert-all-sheets-to-pdf-with-google-apps-script/30492812#30492812 | |
* | |
* @param {String} email Where to send the PDF [OPTIONAL] | |
* @param {String} spreadsheetId Or the active spreadsheet[OPTIONAL] | |
* @param {String} sheetName The tab to output [OPTIONAL] | |
* @param {String} PdfName [OPTIONAL] | |
*/ | |
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 = "https://docs.google.com/spreadsheets/d/" + spreadsheet.getId() + "/" | |
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=letter' // paper size | |
+ '&portrait=true' // 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); | |
} | |
} // convertSpreadsheetToPdf() | |
function onOpen() { | |
SpreadsheetApp.getUi().createMenu('Create PDF').addItem('Create PDF', 'testCreateOnePdfOneSheet').addToUi() | |
} | |
var TEST_EMAIL = '' // !!!! Complete this if you want the PDF to be emails !!!!!!!!!!! | |
var GSHEET_ID = '1BhHmQ9QCEcV9ZNCuOo4-IZ1o-_b9_TpF5vowo0mkFBU' // "Convert multi-sheet Google Sheet to PDF" | |
var TAB_NAME = 'Sheet2' | |
var PDF_NAME = 'PDF 3' | |
function testVarious() { | |
// Create a PDF containing all the tabs in the active spreadsheet, name it | |
// after the spreadsheet, and email it | |
convertSpreadsheetToPdf(TEST_EMAIL) | |
// Create a PDF containing all the tabs in the spreadsheet specified, name it | |
// after the spreadsheet, and email it | |
convertSpreadsheetToPdf(TEST_EMAIL, GSHEET_ID) | |
// Create a PDF just containing the tab 'Sheet2' in the active spreadsheet, specify a name, and email it | |
convertSpreadsheetToPdf(TEST_EMAIL, null, 'Sheet2', 'PDF 3') | |
} | |
function testCreateOnePdfOneSheet() { | |
// Create a PDF just containing the tab 'Sheet2' in the active spreadsheet, specify a name, and email it | |
convertSpreadsheetToPdf(TEST_EMAIL, null, TAB_NAME, PDF_NAME) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi all,
I really new in apps script.
I have a apps script below that convert from Google sheet to PDF. This is for only one sheet/tab.
My question is , how to convert multiple tabs/sheets of google sheet?