[早上好,我有一些脚本可以将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
定义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>';