Cómo crear PDF's con Google Apps Script

Este artículo se ha usado para el proyecto : Organizador de emails

Hay ocasiones en que puede resultar interesante exportar la información de nuestros documentos de Drive en formato pdf para luego poder enviarla a otras personas de una manera más sencilla.

Como siempre os digo, es más fácil generar pdf con Google Apps Script de lo que podría parecer.

Os lo explico con un ejemplo que vale más que mil palabras.

function PDF()
{
    var file = null;
 
    var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());
 
    if ( files.hasNext() )
            file = files.next();
 
    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
}

Si ejecutáis este ejemplo en un hoja de cálculo de drive lo que hará será copiar el contenido de la hoja de cálculo en un documento pdf.

Las posibilidades son infinitas.

Recordad que si necesitáis ayuda para eso estamos.

NOTA: Tiempo después de crear este post cree un código nuevo que permite crear PDFs de rangos, hojas sueltas y en general da bastante más versatilidad: Como exportar un PDF de un rango

NOTA: Tal vez también te interesa convertir GDocs a PDF

77 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. ummm.... Interesante pregunta... Supongo que si, pero sinceramente, jamás lo he probado ni se muy bien por donde empezaria. si encuentras la manera compartelo por favor, yo tb estoy interesado
      Nos vemos

      Eliminar
  2. Que pasa con los Documentos q tienen mas de una hoja?? y yo solo quiero el PDF de una sola hoja

    ResponderEliminar
    Respuestas
    1. Perdon por no responder hasta hoy, este comentario se me habia quedado traspapelado. La única manera que se me ocurre es que copies esa hoja en un documento nuevo con solo esa hoja y crees el documento pdf desde ahí.

      Eliminar
    2. He hecho un artículo nuevo que te permitiria extraer el PDF de una sola hoja : https://googleappscriptsweb.blogspot.com/2020/08/como-crear-un-pdf-de-una-seleccion-con-google-scripts.html Espero que te sirva

      Eliminar
  3. como hacer para que el pdf quede con otro nombre? gracias

    ResponderEliminar
    Respuestas
    1. Al final del script pon lo siguiente: newFile.setName("Pon_aqui_el_nombre_que_quieras_ponerle");
      Ya contarás como te ha ido
      Nos vemos

      Eliminar
  4. Hola Pako quisiera saber si hay una posibilidad de exportar el nombre que este asociado a ese documento, para que sea personalizado la exportación.

    Gracias !

    ResponderEliminar
  5. No te acabo de entender.
    Al generar el PDF se genera con el mismo nombre que el original.
    El fichero de origen tiene este nombre: SpreadsheetApp.getActiveSpreadsheet().getName()

    Igual soy yo que no te entiendo, podrias volvermelo a explicar? o era esto?

    ResponderEliminar
  6. Hola Pako, Excelente aportación, quiero darle uso para crear PDF´s foliados a partir de una plantilla, el folio lo tomaría de una celda, todo bien hasta ahí, solo que los PDF´s los guarda en mi unidad de Drive y quisiera guardarlos dentro en una carpeta dentro en una unidad de equipo, te agradecería bastante me pudieras indicar como lograrlo.

    function onOpen()
    {
    var ui = SpreadsheetApp.getUi();
    ui.createMenu('PDF')
    .addItem('Exportar a PDF', 'PDF')
    .addToUi();
    }

    function PDF()
    {
    var file = null;

    var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());

    if ( files.hasNext() )
    file = files.next();

    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
    var values = SpreadsheetApp.getActiveSheet().getRange("L2").getValues();
    Logger.log(values["L2"]);

    newFile.setName("Documento N° "+ values);
    }

    ResponderEliminar
    Respuestas
    1. Hola,

      En vez de hacer esto:

      var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());

      haria la creación del fichero donde lo quieres, y así te evitas problemas.

      Aquí tienes un ejemplo de como hacerlo:

      http://googleappscriptsweb.blogspot.com.es/2015/10/como-crear-ficheros-y-carpetas-con.html

      Nos vemos!

      Eliminar
  7. Hola buenas noches, he practicado crear PDF´s pero mi duda es si quieres crear unicamente las celdas seleccionadas del Spreadsheet... como se puede lograr esto??

    gracias!!

    ResponderEliminar
    Respuestas
    1. Prueba con esto: https://googleappscriptsweb.blogspot.com/2020/08/como-crear-un-pdf-de-una-seleccion-con-google-scripts.html

      Eliminar
  8. Hola buenas noches junto con saludar y agradecer tu pos tengo la mims consulta que usuario anterior ¿como puede hacer para seleccionar un rango de una hoja determina para generar el PDF?

    dese ya muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola, se me pasó el comentario anterior de responder.

      La única manera que le veo para hacerlo es copiar el rango que te interese en otro spreadsheet nuevo y entonces generar el PDF de ese nuevo spreadsheet.

      Espero que os sirva

      Nos vemos

      Eliminar
    2. Me voy a corregir a mi mismo un tiempo despues :D . Si que hay una forma, en este artículo: https://googleappscriptsweb.blogspot.com/2020/08/como-crear-un-pdf-de-una-seleccion-con-google-scripts.html explico como realizar una exportación de PDF más profesional que la que hice en sus momentos en este artículo

      Eliminar
  9. PAra coger solo un rango de filas y columnas?

    ResponderEliminar
    Respuestas
    1. sheet.getRange(x,y,z,t) y copiar ese rango en otra hoja

      Creo que sería la mejor solucion

      Nos vemos

      Eliminar
    2. Tal vez esto te sirva mejor: https://googleappscriptsweb.blogspot.com/2020/08/como-crear-un-pdf-de-una-seleccion-con-google-scripts.html

      Eliminar
  10. Como puedo enviar el PDF por correo electrónico?

    ResponderEliminar
    Respuestas
    1. Hola,
      Para enviar cualquier documento dentro un correo se tiene que enviar en forma de Blob dentro del campo attachments (parametro opcional)
      Si tienes el pdf cargado dentro de la variable pdf ( por ejemplo)
      MailApp.sendEmail('blabla@blibli.com', 'Envio de PDF en un correo', 'PDF incluido', {
      name: 'PDF Sender',
      attachments: [pdf.getAs(MimeType.PDF)]
      });

      Espero q te sirva

      Eliminar
  11. Hola, me gustaría saber cómo puedo hacer para que el pdf que genero se guarde con el nombre del cliente que está en una celda de la misma hoja...Se puede? Soy nueva en todo esto y aún no logro sacarlo. Gracias!!!

    ResponderEliminar
    Respuestas
    1. Hola Claro que se puede, mira yo lo he hecho así:

      var funcionario = sheetActive.getRange("B6").getValue();//Captura del nombre del funcionario de la hoja activa
      var cargo = sheetActive.getRange("D6").getValue();//Captura del cargo del funcionario
      var dateformat = sheetActive.getRange("D7").getValue();
      var process = sheetActive.getRange("B7").getValue();
      var emailAddress = 'correo@correo.com';//Correo electrónico al que enviará el archivo
      var filename = 'Transferencia Documental_'+ funcionario + '_' + fecha + '.pdf'; //Nombre del archivo en Pdf

      Eliminar
  12. Es mas sencillo de lo que parece.

    Tienes que obtener el id del pdf (GetID()) y con ese id a través del DriveApp, abrir el fichero y hacerle un setName.

    ya me explicaras como te ha ido

    ResponderEliminar
  13. Hola Amigo, favor tengo la gran complicación de imprimir PDF desde una plantilla que se rellena con una lista desplegable, podrías ayudarme con mi problema.?
    Gracias.

    ResponderEliminar
    Respuestas
    1. Me encantaria ayudarte pero hasta donde yo se, no se puede imprimir desde un script.

      Se puede crear el PDF, se puede enviar por correo, etc... pero imprimirlo es imposible.

      Sorry

      Eliminar
  14. Hola a todos, logro enviar la hoja activa por correo y como adjunto PDF, pero necesito que se envié en forma horizontal ?

    ResponderEliminar
    Respuestas
    1. Ahora no te entiendo, podrías explicarlo un poco más?

      Gracias

      Eliminar
    2. Tengo una hoja de google sheets, uso una función para transformar la hoja en PDF y luego enviarla por correo como adjunto.

      Pero no se como hacerlo para que esta funcion primero le de el formato horizontal (como cuando envias a imprimir) y luego cree el PDF.

      Eliminar
    3. Sinceramente ni idea.

      Tal vez haya alguna manera pero la verdad, no la conozco.

      Si la encuentras publícala, puede ser muy útil para muchas personas.

      Nos vemos

      Eliminar
    4. Mas de un año despues encontré la manera de resolver tu duda: https://googleappscriptsweb.blogspot.com/2020/08/como-crear-un-pdf-de-una-seleccion-con-google-scripts.html . Con este exportador de PDF es posible imprimir PDF de cualquier tamaño y en cualquier posición

      Eliminar
  15. Hola a todos, necesito su ayuda, es posible guardar una hoja de google sheets como archivo PDF en el disco local (C:) o un disco compartido de un servidor en red???

    ResponderEliminar
    Respuestas
    1. Nope. Desde google apps script nunca podrás acceder a un PC o a un servidor, salvo que en ese PC o servidor hay algún tipo de servicio que te permita subir ficheros.

      Si te sirve un disco compartido en un servidor de red, te serviria una carpeta de Google Drive? Eso si que se podría hacer.

      Nos vemos

      Eliminar
    2. Creas el PDF en el drive, y usas una function download... De esta forma descargas el PDF creado en el drive al pc... Deberás solo configurar el browser para indicarle en que carpeta debe guardar las descargas.

      Eliminar
  16. hola a todos necesito su ayuda, es posible guardar el PDF en una carpeta especifica en mi drive, ya genero el pdf pero esta en drive y lo necesito en una carpeta especifica.

    ResponderEliminar
    Respuestas
    1. var pdf = DriveApp.getFile(id del PDF);
      pdf.makeCopy("PDF", folder);

      Con esto deberia funcionarte

      Eliminar
  17. no lo logre... soy nuevo en esto, pero necesito ayuda así voy,

    //var folder = DriveApp.getFoldersByName('pdf sierra');// aqui esta la carpeta donde deseo que el archivo se grabe
    var file = null;
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth()+1;
    var day = now.getUTCDate();
    var hora = now.getHours();
    var minutos = now.getMinutes();

    var string = day + "/" + month + "/" + year + "-" + hora + ":" + minutos + "\n";

    var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());

    if ( files.hasNext() )
    file = files.next();

    var newFile = DriveApp.createFile(file.getAs('application/pdf')); //archivo en pdf
    newFile.setName(string);// archivo con el nombre que deseo

    //+++++++++++++++++++++++ aqui es donde quiero que el archivo que esta en drive lo mueva a la carperta con nombre pdf sierra.

    var pdf = DriveApp.getFilesByName(newFile);
    var folder = DriveApp.getFoldersByName('pdf sierra');

    ResponderEliminar
  18. Hola,

    No puedo probarlo ahora mismo pero creo que esto te serviria:

    var pdf = DriveApp.getFilesByName(newFile); >> Elimina esta linea
    var pdf = newFile; // Si quieres ponle esta

    Si no recuerdo mal tienes una opcion que te permite copiar a un folder.

    Así que despues del var folder = DriveApp.getFoldersByName('pdf sierra');
    ponle pdf.CopyTo(folder) o pdf.MoveTo(folder); ( no recuerdo bien)

    Ya me diras

    Nos vemos

    ResponderEliminar
  19. hola LordPakus, lo siento no he podido, me sale este error. muchas gracias por tu ayuda


    Detalles del mensaje
    TypeError: No se puede encontrar la función MakeCopy en el objeto bitacora de sierra 13/8/2019-17:51. (línea 275, archivo "macros"

    var pdf = newFile;
    var folder = DriveApp.getFoldersByName('pdf_sierra')
    pdf.MakeCopy(folder);

    ResponderEliminar
    Respuestas
    1. var file = DriveApp.getFileById("adasadadad");
      var folder = DriveApp.getFoldersByName('pdf_sierra')
      file.makeCopy(folder);

      Esto deberia funcionarte.

      Fijate que es makeCopy y no MakeCopy.

      Usa el autocompletar del editor, para este tipo de cosas va muy bien

      Nos vemos

      Eliminar
  20. Hola, alguna función para contar las páginas que tiene un pdf?? Gracias

    ResponderEliminar
  21. Ufff, no es facil lo que pides.

    Los PDF no se pueden leer directamente con google apps script. Se ha de utilizar un OCR y entonces contar las paginas del resultado (y puede descuadrar).

    A ver si alguien tiene alguna solucion y te la puede compartir

    Suerte!

    ResponderEliminar
  22. hola LordPakus, gracias por tu ayuda pero me sigue saliendo este error no se si podras ayudame, mi urgencia es que este archivo quede en una carpeta del Drive para poder compartir esa carpeta a mas usuarios.

    este es el error

    TypeError: No se puede encontrar la función makeCopy en el objeto FileIterator. (línea 281, archivo "macros")

    este es el codigo:


    var file = null;
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth()+1;
    var day = now.getUTCDate();
    var hora = now.getHours();
    var minutos = now.getMinutes();

    var string = day + "/" + month + "/" + year + "-" + hora + ":" + minutos + "\n";

    var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());

    if ( files.hasNext() )
    file = files.next();

    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
    newFile.setName(string);




    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // codigo para buscar una carperta que se llama pdf_sierra en drive y mover el archivo creado en pdf a esa caarpeta, para poder compartirla con mas usuarios
    var pdf = DriveApp.getFilesByName(newFile);
    var folder = DriveApp.getFoldersByName('pdf_sierra');
    pdf.makeCopy(folder);

    mil gracias por compartir tus conocimientos saludos

    ResponderEliminar
  23. Hola,
    Evidentemente, el fileiterator sirve para iterar entre ficheros , no es un fichero como tal.

    La solucion es cambiar esta linea: var pdf = DriveApp.getFilesByName(newFile);
    por esta: var pdf = newFile;

    Ya me diras

    ResponderEliminar
  24. hola ya lo hice pero no mueve el archivo creado en pdf con el nombre (20/08/2019-17:6) a la carpeta que esta en Drive pdf_sierra, y me crea otro que se llama (FolderIterator) igual en pdf.

    no se por que razón no lo mueve me gustaria pegarte el pantallazo pero no se puede

    ResponderEliminar
    Respuestas
    1. Dame un dia que le pueda pegar un repaso. Ahora mismo estoy bastante liado con un proyecto que he de entregar. Te digo algo.

      Eliminar
    2. hola disculpa que te hable de este tema de nuevo pero no he podido..

      Eliminar
    3. Q va, he estado superliado, mis disculpas.

      Te tengo apuntado para revisarmelo cuando pueda, no te aseguro nada.

      Sorry

      Eliminar
  25. Hola que tal LordPakus

    Excelente la funcional para crear el PDF pero necesito que se envie solo una hoja especifica, intente con esto

    function PDF()
    {
    var file = null;

    //var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());
    var file2 = SpreadsheetApp.getActiveSpreadsheet();
    var files = file2.getSheetByName("RADICACION");

    if ( files.hasNext() )
    file = files.next();

    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
    newFile.setName("Radicación diaria")
    }

    Pero me arroja error en .hasNext()

    Que podría hacer?

    ResponderEliminar
    Respuestas
    1. Seguro que este artículo te ayudará más: https://googleappscriptsweb.blogspot.com/2020/08/como-crear-un-pdf-de-una-seleccion-con-google-scripts.html

      Eliminar
  26. Hola,
    Tienes un error grave de concepto. El hasNext solo se puede usar iteradores (en objetos del tipo getFilesByName por ejemplo)

    Una cosa es un file, otra un spreadsheet y otra un sheet. No se puede usar todo junto.

    En tu caso, hay una manera más elegante pero bastante más compleja de explicar, así que la forma fácil seria copiar la hoja que tu quieres en otro spreadsheet.

    Ya me diras como te va

    Nos vemos

    ResponderEliminar
  27. Hola @LordPakus y hay alguna forma de generar un archivo, pero en vez de PDP genere una excel (.xls) ?.

    Agradezco de antemano la respuesta.

    ResponderEliminar
  28. Sinceramente no lo he probado, pero a priori deberia permitirtelo.

    En este link verás la lista de MimeType que admite Google Apps Script : https://developers.google.com/apps-script/reference/base/mime-type

    En principio con MICROSOFT_EXCEL deberia permitirte trabajar con estos formatos.

    Nos vemos

    ResponderEliminar
  29. Hola Buenas Tardes. Utilicé el código para el archivo PDF, pero éste me convierte todas las hojas que tengo en el libro. Cómo hago para que sólo lo hago en la hoja designada. Gracias

    ResponderEliminar
    Respuestas
    1. Hola Alexander,

      Se puede hacer pero es algo más complejo. Me lo apunto para hacer un post.

      Dame un par de dias que me de tiempo a prepararlo.

      Nos vemos

      Eliminar
    2. Este link te ayudará a hacer lo que quieres: https://googleappscriptsweb.blogspot.com/2020/08/como-crear-un-pdf-de-una-seleccion-con-google-scripts.html

      Eliminar
  30. Buenas tardes. Quisiera saber si es posible que el adjunto drive que luego figura el link en mi celda de google. al guardarlo en drive ponerle el nombre de una o varias celdas y no el nombre del archivo original. gracias.

    ResponderEliminar
    Respuestas
    1. Miratelo pero si no voy equivocado con lo que pides , con un .setName tienes suficiente

      Espero que te sirva

      Nos vemos

      Eliminar
  31. HOLA BUENAS TARDES.
    TENGO UN LIO CON TODAS LAS OPCIONES EXPUESTA Y SOY NOVEL EN ESTE TEMA.
    ME GUSTARIA GENERAR UN CODIGO,
    QUE GENERE UN PDF, EN UNA CARPETA DETERMINADA Y CON EL NOMBRE DE UNA CELDA, ALGUIEN ME PODRIA AYUDAR. GRACIAS

    ResponderEliminar
    Respuestas
    1. Hola,

      No tengo por costumbre trabajar para otros gratis, llamame raro :)

      Ayudaré en todo lo que pueda de forma gratuïta a todo aquel que tenga dudas, pon tu codigo y donde te esta dando problemas y te ayudaré sin problemas.

      Si lo que necesitas es un proyecto profesional puedes contactarme en este formulario: https://googleappscriptsweb.blogspot.com/p/como-contratar-mis-servicios-de.html

      Seguro que nos podremos poner de acuerdo en un precio más que asequible.

      Nos vemos

      Eliminar
  32. Hola
    Buenas noches
    Disculpa, utilicé tu código, pero me arroja un error en el .getAs
    mira, así escribí el código

    function Exportar() {
    var file = null;
    var dia = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A4").getValue();
    var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getActiveSheet());
    if ( files.hasNext() )
    file = files.next();
    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
    var filename = 'Reporte_'+ día +'.pdf';
    }

    Me puedes ayudar por favor?
    muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola Judith,

      No lo he podido probar pero todo tiene pinta que estas llamando al getAs de un puntero nulo.

      Yo haria una pequeña modificación:
      function Exportar()
      {
      var file = null;

      var dia = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A4").getValue();

      var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getActiveSheet());

      if ( files.hasNext() )
      {
      file = files.next();
      var newFile = DriveApp.createFile(file.getAs('application/pdf'));
      var filename = 'Reporte_'+ día +'.pdf';
      }
      }

      De esta manera te aseguras que llamas al getAs solo si el fichero existe

      Ya me diras como te funciona

      Nos vemos

      Eliminar
  33. Muchas gracias amigo. Era lo que buscaba y pude aprender algo con tu post. :)

    ResponderEliminar
    Respuestas
    1. Me alegra que te haya servido.

      Para eso estamos!

      Nos vemos

      Eliminar
  34. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. Te diré lo que siempre digo. Si publicas tu código y explicas donde has tenido problemas no tengo ningun problema en echar un cable, pero sin haber hecho nada, lo siento pero no trabajo gratis :D . Si te interesa una solución profesional, ponte en contacto con este formulario (https://googleappscriptsweb.blogspot.com/p/como-contratar-mis-servicios-de.html) y buscaremos la forma de darte una solucion que se ajuste a tus necesidades.

      Nos Vemos!

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
    3. Este comentario ha sido eliminado por el autor.

      Eliminar
  35. Hola, quisiera saber si puedes darme luz con respecto a este error que se me está generando con el siguiente código:

    Error:
    "Exception: Los parámetros (DriveApp.File,DriveApp.FolderIterator) no coinciden con la firma del método para DriveApp.File.makeCopy. (línea 77, archivo "Código")"

    Código:
    var folder = DriveApp.getFoldersByName('Certificates');
    var file = null;
    var formulario = spreadsheet.getSheetByName("FVL_Answers");
    var CC = formulario.getRange(formulario.getLastRow(),5).getValue();
    var files = DriveApp.getFilesByName("FVL_ACII");

    if (files.hasNext())
    file = files.next();

    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
    newFile.setName('Certificate_'+ CC +'.pdf')

    var pdf = newFile;
    pdf.makeCopy(pdf,folder)

    ResponderEliminar
    Respuestas
    1. Buenas, está claro... estas llamando mal a makeCopy.

      O bien haces pdf.makeCopy(folder);

      O bien haces pdf.makeCopy(nombrequequieras,folder);

      Pero pasarle el fichero a el mismo, no le gusta.

      Ya me diras como te funciona!

      Nos vemos

      Eliminar
    2. Muchas gracias por tu ayuda, finamente luego de tanto probar, me resultó mas sencillo llamar el folder dese ID y aplicar tu sugerencia con makeCopy, ademas le agregué el setTrashed para eliminar el documento creado originalmente y evitar la duplicidad con el que moví a la carpeta; quedó así:

      var folder = DriveApp.getFolderById("Id del folder destino")
      var file = null;
      var formulario = spreadsheet.getSheetByName("Sheet de donde tomará el valor");
      var CC = formulario.getRange(formulario.getLastRow(),5).getValue();
      var files = DriveApp.getFilesByName("Documento a tomar");

      if (files.hasNext())
      file = files.next();

      var newFile = DriveApp.createFile(file.getAs('application/pdf'));
      newFile.setName('Certificate_'+ CC +'.pdf')

      var pdf = newFile;
      pdf.makeCopy(folder);
      pdf.setTrashed(true)

      Eliminar
  36. buen dia lordpakus, tengo este problema... busco dataos de una planilla A... para actualizar en la planilla B.... y luego generar el pdf de la planilla B.

    El pdf se genera sin problemas, pero con los datos viejos... termina la funcion y recien ahi actualiza la planilla A.
    Estoy luchando con esto.. hice pruebas y demas, pero no logro dar en la tecla


    function PDF_Individual(fila)
    {
    //obtiene datos de un spreadsheet
    datosparapdf(fila);
    //esta es la hoja donde se pegan los datos
    var planilla = SpreadsheetApp.openById("1gpf2LP0NwDEIPYjif8McjTnv0ehS_9HUpuTENL-IJBY").getSheetByName("Hoja 1");

    planilla.getRange(4, 2).setValue(detalle[0]);
    planilla.getRange(4, 7).setValue(detalle[1]);
    planilla.getRange(6, 2).setValue(detalle[2]);

    for (y =4; y <9;){

    planilla.getRange(10, y).setValue(cuotasr[y-4]);
    planilla.getRange(12, y).setValue(cuotass[y-4]);
    planilla.activate();

    y++;}


    planilla.getRange(1, 9).setValue(fila);
    Logger.log(detalle[2]);

    hacertiempo(40);
    Logger.log("paso tiempo");

    //llamo a la funcion para crear el pdf
    creararchivospdf(fila);

    }

    ResponderEliminar
  37. corrijo...
    buen dia lordpakus, tengo este problema... busco dataos de una planilla A... para actualizar en la planilla B.... y luego generar el pdf de la planilla B.

    El pdf se genera sin problemas, pero con los datos viejos... termina la funcion y recien ahi actualiza la planilla B
    Estoy luchando con esto.. hice pruebas y demas, pero no logro dar en la tecla

    ResponderEliminar
    Respuestas
    1. No me quiero equivocar pero me parece que tienes un problema de actualización de datos.

      Es decir, actualizas el spreadsheet e immediatamente quieres usarlo para lo que sea, esto SIEMPRE genera problemas.

      Solución? SpreadsheetApp.flush();

      Pon esta linea justo cuando acabes de actualizar los datos y antes de generar el PDF. Esto fuerza el código a esperar hasta que el spreadsheet esté 100% actualizado.

      Creo que con esto deberia funcionarte.

      Ya me diras como te ha ido

      Nos vemos!

      Eliminar
  38. Si funciono... muchas gracias !!!!

    ResponderEliminar

Tal vez te interese

Entradas populares