Hace ya tiempo expliqué como generar PDFs con Google Apps Script pero era una forma muy simple de hacerlo. Para ser claros, se quedaba corto en muchos aspectos. Por suerte lo que os expliqué no es la única forma de generar PDFs con Google Scripts.
Existe un servicio dentro de Google que permite exportar el rango que quieras en formato PDF, pudiéndolo formatear como quieras. Es un poco más complejo que lo último que os expliqué pero su potencial es inacabable. Con un ejemplo lo veréis claro.
En este caso, deberíais seleccionar un rango de un spreadsheet y llamar a este script. Lo podéis modificar fácilmente para conseguir lo que queráis.
function ExportPDF() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getActiveSheet(); var range = sheet.getActiveRange(); var exportUrl = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?exportFormat=pdf&format=pdf' + '&size=FOLIO' //Tamaño del papel: 0-LETTER,1-TABLOID,2-LEGAL,3-STATEMENT,4-EXECUTIVE,5-FOLIO,6-A3,7-A4,8-A5,9-B4,10-B5 + '&portrait=false' //Orientación: False - Horizontal / True - Vertical + '&fitw=true' //Forzamos que quepa correctamente en el ancho de la hoja + '&top_margin=1.75' //Margen Superior + '&bottom_margin=1.75' //Margen inferior + '&left_margin=1.5' //Margen Izquierdo + '&right_margin=1.5' //Margen Derecho + '&sheetnames=false' //Marcamos si se ha de poner el nombre de las hojas o no + '&printtitle=false' //Marcamos si se ha imprimir el titulo del documento o no + '&pagenum=false' //Indicamos si se de pintar el número de página + '&gridlines=true' //Marcamos si queremos que se vean las lineas de las celdas o no + '&fzr=FALSE' //Frozen: marcamos si las cabeceras se han de ir imprimiendo o no en las consecutivas hojas + '&gid=' + sheet.getSheetId() //Identificador del tab + '&r1=' + (range.getRow() - 1) //Margenes del rango seleccionado + '&r2=' + range.getLastRow() + '&c1=' + (range.getColumn() - 1) + '&c2=' + range.getLastColumn(); //Hacemos la petición para pedir el PDF var response = UrlFetchApp.fetch(exportUrl, { muteHttpExceptions: true, headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() } } ); //Creamos el PDF con el binario que nos devuelve la petición anterior var blob = response.getBlob(); blob = blob.setName(spreadsheet.getName()); var pdfFile = DriveApp.createFile(blob); SpreadsheetApp.getUi().alert(pdfFile.getUrl()); }
Una vez tenéis hecho el PDF podéis enviarlo por correo , guardarlo en una carpeta de Drive o dejarlo disponible para que alguien se lo baje de una web, las posibilidades son infinitas.
Espero que os haya servido
No vaciléis en hacerme llegar vuestras dudas
Nos vemos
NOTA: Tal vez también te interesa convertir GDocs a PDF
NOTA: Te interesa extraer a PDF hojas seleccionadas de un spreadsheet con Google Apps Script?
Hola Amigo!
ResponderEliminarHe intentado ponerlo en practica, pero siempre me arroja el siguiente error:
https://drive.google.com/file/d/15hDKZ3mkEGvwttIGsf9TpMaeL9T7bS_e/view?usp=drivesdk
Me podeis orientar?
Mil gracias
Te he pedido acceso al documento. Así sin más no soy capaz de ver lo que te pasa.
EliminarDame acceso y te lo miro
Nos vemos
Ya te lo he compartido!
EliminarMuchas gracias
Que problema te da? Acabo de probarlo y me va perfecto : https://drive.google.com/file/d/1RyzMQw7Fy3_QxLg7kxyT_bSYY78YrJq1/view
ResponderEliminarTenias un rango seleccionado en el momento de ejecutar el script?
Nos vemos
como se hace para especificar donde se guarda, gracias.
ResponderEliminarEsta duda también la tengo yo, quedo atento si pudiste dar con el objetivo :) saludos
EliminarDisculpad que no vi el comentario. En este link vereis como se hace para especificar donde guardarlo : https://www.tutorialesgoogleappscripts.com/2020/10/como-generar-un-pdf-de-hojas-seleccionadas-con-google-apps-script.html
EliminarMe funciona perfectamente para exportar el rango a PDF! Pero no sé cómo incluirlo en el MailApp para enviarlo como archivo adjunto! Se que hay otro artículo explicando como enviar el correo, pero no encuentro la forma de unir ambos. Agradecería enormemente la ayuda del que pueda lograrlo! Saludos
ResponderEliminarAcabo de hacerte este artículo solo para ti :) : https://www.tutorialesgoogleappscripts.com/2020/10/como-generar-un-pdf-y-enviarlo-por-email-con-google-apps-script.html
EliminarEres grande crack! Te has ganado un fiel seguidor de tu trabajo. Muchas gracias :)
EliminarPara eso estamos! Cualquier cosa hazmela saber. Si te gusta lo que hago recuerda que puedes seguirme en twiter y facebook :)
EliminarQuiero contarte que estoy bastante entusiasmado con esto, pues tengo semanas intentando dar con el resultado.
EliminarYa puse en práctica el código que compartiste en https://www.tutorialesgoogleappscripts.com/2020/10/como-generar-un-pdf-y-enviarlo-por-email-con-google-apps-script.html
Sin embargo, al no ser programador, hay varias cosas con las que no estoy familiarizado, y, por ende, me cuesta un poco entender la naturaleza del código, por lo cual tengo varias dudas: cómo funciona la variable "tab"? pregunto porque más adelante dice .getSheetByName(tab)y no tengo ninguna sheet con ese nombre, por lo cual no sé si deba crearla o si se genera sola.
Por otro lado, al ejecutar la funcion SendPDF me genera el siguiente error: Exception: "Se produjo un error inesperado al obtener el método o la propiedad getFolderById en el objeto DriveApp". Y, nuevamente, por no entender la naturaleza del código no sabría qué hacer para resolverlo :(.
Agradezco mucho tu apoyo, compartiré con la comunidad el enlace al archivo que llevo meses trabajando, que es un sistema de gestión de ordenes de compra a proveedores, por si alguien desea hacer algo parecido. https://docs.google.com/spreadsheets/d/1e_uhHmvZiXxirMqaLLkNkxwRUTAX_3CuBRi1FRnasNA/edit#gid=829165323
Un fuerte abrazo crack!
He montado un artículo para explicarte un poco esos conceptos, espero que te sirva: https://www.tutorialesgoogleappscripts.com/2020/11/conceptos-basicos-de-google-apps-script.html
EliminarOye, me parece genial todo el contenido que generas y la gran ayuda que das, eres un grande, tus tutos me ayudaron muchisimo, muchas gracias :)
ResponderEliminarPara eso estamos! Gracias por ese tipo de comentarios.
EliminarNos vemos!
Hola, gracias por el código.
ResponderEliminarTengo la siguiente consulta, quiero ajustar el tamaño de la página al mismo tamaño que el rango.
Al momento de definir "&size=" si me permitió definir una media exacta, por ejemplo 10x30, pero ahora tengo la necesidad que el valor 30 sea variable, es decir calcular el valor real de altura del rango porque algunas celdas de mi rango aumentaron de altura. definí una variable altura con el método getHeight pero no reconoce el código cuando escribo &size = 10xaltura. gracias por tu ayuda
Pon tu código y lo reviso.
EliminarNos vemos!
Hola, quiero guardar especificamente una sola hoja de sheets en pdf, pero solo solo he podido guardar todas las hojas, no he encontrado la manera de que sea solo un hoja en especifico, gracias por tu ayuda
ResponderEliminarHola,
EliminarLo que comentas es raro... seguro que estas usando el código de este post? Que yo recuerde este código exportaba solamente un tab... Dime algo y lo miramos.
A muy malas puedes mirarte este artículo que también debería funcionarte: https://www.tutorialesgoogleappscripts.com/2020/10/como-generar-un-pdf-de-hojas-seleccionadas-con-google-apps-script.html
Eliminar