Como generar un PDF de hojas seleccionadas con Google Apps Script


 Ya he hecho algún que otro post hablando de exportar a PDF y más uno me ha pedido como hacer un script que permita seleccionar que hojas queremos exportar con Google Apps Script

La única manera que hay (o al menos que yo he encontrado :) ) es copiar todas las hojas a un documento limpio y exportar a PDF todo el documento generado. El código es bastante sencillo:
function ExportPDF() 
{
   var timestamp = Math.floor((new Date()).getTime() / 1000);
   
   var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
   var values      = spreadsheet.getSheetByName("ToPrint").getDataRange().getValues();
   var out         = SpreadsheetApp.create(spreadsheet.getName() + "-ToPrint-" + timestamp);
   var folder      = DriveApp.getFolderById(values[1][1]);
   
   SpreadsheetApp.flush();
   for(var i = 1 ; i < values.length ; ++i)
   {
      var tab = values[i][0];
      
      var sheet = spreadsheet.getSheetByName(tab);
      
      if(sheet == null || sheet == undefined)
      {
         SpreadsheetApp.getUi().alert("Unknown tab:" + tab);
         return;
      }
      
      sheet.copyTo(out).setName(sheet.getName());
   }
   var first_sheet = out.getSheets()[0];
   out.deleteSheet(first_sheet);
   SpreadsheetApp.flush();
   
   var exportUrl = 'https://docs.google.com/spreadsheets/d/' + out.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
      + '&scale=4'                     // Fit to Page?
      + '&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
      + '&id=' + out.getId();          //Identificador del tab
            
  var response = UrlFetchApp.fetch(exportUrl, {  muteHttpExceptions: true, headers: { Authorization: 'Bearer ' +  ScriptApp.getOAuthToken()  } } );
  
  var blob = response.getBlob();
  blob = blob.setName(out.getName());
  var pdfFile = DriveApp.createFile(blob);
  pdfFile.moveTo(folder);
  SpreadsheetApp.getUi().alert(pdfFile.getUrl());

  DriveApp.getFileById(out.getId()).setTrashed(true);
  
}

Si os fijais en el código se basa para funcionar en que tengáis un tab que se llame ToPrint que contendrá la lista de hojas a exportar y la carpeta donde queremos tener los PDFs generados.

La pestaña ToPrint se verá de esta manera:
Como seleccionar pestañas a convertir a pdf y folder donde poner los resultados con Google Apps Script



El script se encarga de generar un nuevo spreadsheet, copiar las hojas que nos interesan y generar un PDF de todo el spreadsheet con google apps script

Espero que os haya servido, no vaciléis en hacerme llegar vuestras dudas

Nos vemos

NOTA: He hecho una versión mejorada que permite enviar PDFs por email con Google Apps Script, tal vez también te interesa!


No hay comentarios:

Publicar un comentario

Tal vez te interese