Saltar al contenido

Exporte (o imprima) con un script de Google la nueva versión de las hojas de cálculo de Google a un archivo pdf, utilizando las opciones de PDF

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);
  }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *