GAS电子表格脚本,用于在“自定义对话框”中创建和打开/下载驱动器PDF

问题描述 投票:0回答:1

[早上好,我有一些脚本可以将PDF文件保存在特定的文件夹中,然后通过电子邮件发送。即使我的代码未优化,一切也可以正常工作。 Recently I put a previous query他们在哪里帮助我如何创建“自定义对话框”以显示下载PDF文件的链接,但是,当我单击链接时,我会自动收到错误400,这使我无法下载该PDF。我仍然无法确定失败的原因,除此之外,我希望PDF显示在“自定义对话框”中。代码:

function CrearPDF(){
var spreadsheet = SpreadsheetApp.getActive();
var nombreHoja = 'LP con Seguros';
var sheet = spreadsheet.getSheetByName(nombreHoja).activate();
var gid = sheet.getSheetId()

var fecha = Utilities.formatDate(new Date(), "GMT-5", "dd/MM/yyyy HH:mm:ss");//Captura de la fecha de acuerdo a la zona horaria
var dni = spreadsheet.getRange('\'LP con Seguros\'!B1').getValues();
var nrocuenta = spreadsheet.getRange('\'LP con Seguros\'!C6').getValues();
var correo = spreadsheet.getRange('\'LP con Seguros\'!K13').getValues();
var valRegisSimul=spreadsheet.getRange('\'LP con Seguros\'!P10').getValues();
var nombrePDF = valRegisSimul + " de LP DNI "+dni+" " +fecha+".pdf";

var ssID = spreadsheet.getId();
var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export"+
                                                        "?format=pdf&"+
                                                        "size=a4&"+
                                                        "portrait=true&"+
                                                        "scale=4&"+
                                                        //"top_margin=0.40&"+
                                                        //"bottom_margin=0.40&"+
                                                        //"left_margin=0.40&"+
                                                        //"right_margin=0.40&"+
                                                        "gridlines=false&"+
                                                        "printnotes=false&"+
                                                        //"pageorder=2&"+
                                                        "horizontal_alignment=CENTER&"+
                                                        "vertical_alignment=TOP&"+
                                                        "printtitle=false&"+
                                                        "sheetnames=false&"+
                                                        "fzr=false&"+
                                                        "fzc=false&"+
                                                        "attachment=false&"+
                                                        "gid=" + gid + "&"+
                                                        "r1=" + 0 + "&"+
                                                        "c1=" + 0 + "&"+
                                                        "r2=" + 62 + "&"+
                                                        "c2=" + 8;

var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
var response = UrlFetchApp.fetch(url, params).getBlob();

// Creamos un fichero con el Blob anterior y le cambiamos el nombre 
var token = ScriptApp.getOAuthToken();
var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
var pdf = docurl.getBlob().setName(nombrePDF).getAs('application/pdf');

var folders = DriveApp.getRootFolder().getFolders(); // En esta variable se almacenan solo los carpetas del directorio raiz
var nombrecarpeta = "DNIs de LP y Simulaciones";


  if(folders.hasNext() == false)//Para cuando no hay carpetas o folder aún en el Drive
  {
    var NewFolder = DriveApp.createFolder(nombrecarpeta);
    NewFolder.createFile(pdf);


      var file = NewFolder.createFile(pdf);
      Logger.log(file.getDownloadUrl());


  }
  else //En el caso de que sí haya carpetas o folder en el Drive, los recorre hasta encontrar el nombre "nombrecarpeta" sino lo encuentra la creará y ahí guarda el archivo
  {
    while (folders.hasNext())
    {
      var folder = folders.next();
      if(folder.getName() == nombrecarpeta)// en el caso de que exista una carpeta con el nombre terminamos la iteracion de las carpetas
    {
      var folderid = folder.getId();
      var Transfolder = DriveApp.getFolderById(folderid);
      Transfolder.createFile(pdf);

      var file = Transfolder.createFile(pdf);
      Logger.log(file.getDownloadUrl());

      break;
    }
    else 
    {// Creamos la carpeta en el caso de que aún no exista y guardamos el archivo en la nueva carpeta
      var NewFolder = DriveApp.createFolder(nombrecarpeta);
      NewFolder.createFile(pdf);
      var file = NewFolder.createFile(pdf);
      Logger.log(file.getDownloadUrl());
      break;
    }
   }   
  }

spreadsheet.setActiveSheet(spreadsheet.getSheetByName('LP con Seguros'), true);
var sheet = spreadsheet.getActiveSheet();

  //Obtiene el nombre del archivo PDF recién creado, así como su contenido
   var archivo = docurl.getBlob().getAs('application/pdf').getBytes(); // sin la opción getBytes obtendríamos un archivo sin contenido
   var attach = {fileName:nombrePDF,content:archivo, mimeType:'application/pdf'};

   var subject = valRegisSimul + ' de Crédito Efectivo DNI ' + dni + ' ' + fecha;

   var html = '<body>' + '<strong>' + ' <p>Estimado(a)' + '</strong>' + '</p>' + 
      '<p>A continuación encontrará adjunto el archivo del plan de pagos de su Crédito Efectivo, recuerde siempre realizar los abonos al número de cuenta del préstamo.</p>' + 
      '<p style="text-align: left;">==> El número de cuenta del Crédito Efectivo a donde se deben hacer los abonos es: ' + '<strong>' + nrocuenta + '</strong>' + '</p>'

  //Muestra un Popup preguntando si deseas enviar la transferencia por correo  
   SpreadsheetApp.getUi()
  var ui = SpreadsheetApp.getUi();

  var response = ui.alert('Se completó el registro correctamente, ¿Desea enviar el plan de pagos al correo registrado: '+ correo + ' ?' + '\n\n' + 'Caso contrario, el archivo ' + nombrePDF + ' sólo se guardará en la carpeta ' + nombrecarpeta + ' de Drive', ui.ButtonSet.YES_NO);
  // Si la respuesta es si, mandará el correo, de lo contrario termina el programa
  if (response == ui.Button.YES)
  {
      GmailApp.sendEmail(correo, subject, "Cuerpo", {htmlBody:html, attachments:[attach]});
      SpreadsheetApp.getUi().alert('Se envió correctamente el plan de pagos al correo '+ correo + '.' + '\n\n' + 'Mencione regreso por seguros y número de cuenta del Crédito efectivo');

     }else
     {
       //Solo por referencia
       Logger.log('El archivo '+ nombrePDF + ' quedó guardado en la carpeta ' + nombrecarpeta + ' de Drive');
     };

  var url = file.getDownloadUrl();
  var html = '<a href=" + url + " target="_blank">Para descargar el PDF con la simulación de pagos, haz clic aquí</a>';
  var userInterface = HtmlService.createHtmlOutput(html);
  var title = "Descargar PDF de Google Drive";
  SpreadsheetApp.getUi().showModalDialog(userInterface, title);

  }

Custom DialogError 400预先感谢您将收到的答复。感谢@Adam Stevenson的支持,我更正了代码,但是仍然无法下载PDF,现在出现了另一个错误。附件截图。Error after correcting the code

pdf google-apps-script google-sheets dialog drive
1个回答
0
投票

定义html时:

var html = '<a href=" + url + " target="_blank">Para descargar el PDF con la simulación de pagos, haz clic aquí</a>';

…您没有用单引号'分割字符串。由于双引号"以单引号开头,因此不会结束字符串。因此,+ url +只是作为字符串的一部分被读取。正确的代码:

var html = '<a href="' + url + '" target="_blank">Para descargar el PDF con la simulación de pagos, haz clic aquí</a>';
© www.soinside.com 2019 - 2024. All rights reserved.