Solución:
Aquí está mi script de hoja de cálculo a PDF. Funciona con la nueva API de hoja de cálculo de Google.
// Convert spreadsheet to PDF file.
function spreadsheetToPDF(id,index,url,name)
{
SpreadsheetApp.flush();
//define usefull vars
var oauthConfig = UrlFetchApp.addOAuthService("google");
var scope = "https://docs.google.com/feeds/";
//make OAuth connection
oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oauthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oauthConfig.setConsumerKey("anonymous");
oauthConfig.setConsumerSecret("anonymous");
//get request
var request = {
"method": "GET",
"oAuthServiceName": "google",
"oAuthUseToken": "always",
"muteHttpExceptions": true
};
//define the params URL to fetch
var params="?gid="+index+'&fitw=true&exportFormat=pdf&format=pdf&size=A4&portrait=true&sheetnames=false&printtitle=false&gridlines=false';
//fetching file url
var blob = UrlFetchApp.fetch("https://docs.google.com/a/"+url+"/spreadsheets/d/"+id+"/export"+params, request);
blob = blob.getBlob().setName(name);
//return file
return blob;
}
Tuve que usar el parámetro “muteHttpExceptions” para saber exactamente la nueva URL. Con este parámetro, descargué mi archivo con la extensión HTML para obtener una página “Movido permanentemente” con mi URL final (“https://docs.google.com/a/”+url+”/spreadsheets/d/”+id+ “/ exportar” + params “).
Y tenga en cuenta que estoy en una organización. Así que tuve que especificar su nombre de dominio (parámetro “url”, es decir, “midominio.com”).
(Copiado de esta respuesta).
Esta función es una adaptación de un script proporcionado por “ianshedd …” aquí.
Eso:
- Genera archivos PDF de TODAS las hojas en una hoja de cálculo y los almacena en la misma carpeta que contiene la hoja de cálculo. (Se asume que solo hay una carpeta haciendo eso, aunque Drive permite la contención múltiple).
- Nombra archivos pdf con hojas de cálculo y nombres de hojas.
- Utiliza el servicio Drive (DocsList está obsoleto).
- Puede utilizar un ID de hoja de cálculo opcional para operar en cualquier hoja. De forma predeterminada, espera trabajar en la “hoja de cálculo activa” que contiene el script.
- Solo necesita autorización “normal” para operar; no es necesario activar servicios avanzados o jugar con
oAuthConfig
.
Con un poco de investigación y esfuerzo, podría conectarse a una API de combinación de PDF en línea para generar un solo archivo PDF. Salvo eso, y hasta que Google proporcione una forma de exportar todas las hojas en un PDF, tendrá archivos separados.
Texto:
/**
* Export one or all sheets in a spreadsheet as PDF files on user's Google Drive,
* in same folder that contained original spreadsheet.
*
* Adapted from https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579#c25
*
* @param {String} optSSId (optional) ID of spreadsheet to export.
* If not provided, script assumes it is
* sheet-bound and opens the active spreadsheet.
* @param {String} optSheetId (optional) ID of single sheet to export.
* If not provided, all sheets will export.
*/
function savePDFs( optSSId, optSheetId ) {
// If a sheet ID was provided, open that sheet, otherwise assume script is
// sheet-bound, and open the active spreadsheet.
var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
// Get URL of spreadsheet, and remove the trailing 'edit'
var url = ss.getUrl().replace(/edit$/,'');
// Get folder containing spreadsheet, for later export
var parents = DriveApp.getFileById(ss.getId()).getParents();
if (parents.hasNext()) {
var folder = parents.next();
}
else {
folder = DriveApp.getRootFolder();
}
// Get array of all sheets in spreadsheet
var sheets = ss.getSheets();
// Loop through all sheets, generating PDF files.
for (var i=0; i<sheets.length; i++) {
var sheet = sheets[i];
// If provided a optSheetId, only save it.
if (optSheetId && optSheetId !== sheet.getSheetId()) continue;
//additional parameters for exporting the sheet as a pdf
var url_ext="export?exportFormat=pdf&format=pdf" //export as pdf
+ '&gid=' + sheet.getSheetId() //the sheet's Id
// 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 + url_ext, options);
var blob = response.getBlob().setName(ss.getName() + ' - ' + sheet.getName() + '.pdf');
//from here you should be able to use and manipulate the blob to send and email or create a file per usual.
//In this example, I save the pdf to drive
folder.createFile(blob);
}
}