Добрый день, я создал функцию для сохранения ранее отформатированного листа на диске, мне удалось сохранить его в выбранной папке на диске, кроме того, я также могу отправить этот файл * .pdf на зарегистрированную почту в ячейке, что Все, что мне нужно, это иметь возможность открывать в HTML с помощью Custom Dialog или в любом случае просто скачать этот * .pdf файл. Код выглядит следующим образом:
function CrearPDF(){
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('LP con Seguros'), true);
var sheet = spreadsheet.getActiveSheet();
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 r1, c1, r2, c2;
var libroActual = SpreadsheetApp.getActive();
var nombreHoja = libroActual.getActiveSheet().getName();
var gid = libroActual.getActiveSheet().getSheetId();
var ssID = libroActual.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 newPdfFile = DriveApp.createFile(response);
//newPdfFile.setName(nombrePDF);//localiza tu pdf en tu Drive :)
//}
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);
}
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);
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);
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>' +
'<p></p>'+
'<p></p>'+'<p>'+'<strong>' + 'David Ezequiel Salcedo Pablo ' + '</strong>' + '</p>'+
'<p>'+'<strong>' + 'Asesor de Servicios - Financiera Oh!' + '</strong>' + '</p>'+
'<p>'+'<strong>' + 'Celular: 976020013' + '</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');
};
}
Идея состоит в том, что в конце кода добавляется функция, которая позволяет мне загружать указанный PDF-файл на ПК, мобильный телефон или планшет или в любом случае, как я уже говорил, чтобы иметь возможность открывать этот PDF в пользовательском диалоге через сайт Google. Я заранее благодарю вас за ответы, которые вы можете получить.
Вызов .createFile()
возвращает File. С этим файлом, ты можешь называть .getDownloadUrl()
и делать то, что ты хочешь в Dialog.
var file = NewFolder.createFile(pdf);
Logger.log(file.getDownloadUrl());
Пожалуйста avГ-same, если entendГ - зло и это не то, что ты искал.
TambiГ©n я хочу предупредить, что Ваш cГіdigo он может улучшаться muchГ-simo. Например, у тебя есть много вызовов, удвоенных как
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('LP con Seguros'), true);
var sheet = spreadsheet.getActiveSheet();
// ...
var libroActual = SpreadsheetApp.getActive();
var nombreHoja = libroActual.getActiveSheet().getName();
var gid = libroActual.getActiveSheet().getSheetId();
, что это podrГ-схвати меняться asГ -
var spreadsheet = SpreadsheetApp.getActive();
var nombreHoja = 'LP con Seguros';
var sheet = spreadsheet.getSheetByName(nombreHoja).activate();
var gid = sheet.getSheetId()
Я Предлагаю, что уже, когда ты добился, чтобы оно функционировало совсем, как ты хочешь, который ты помещаешь mГЎs время проверить немножко cГіmo, ты можешь улучшать cГіdigo.
ЗАМЕТЬ: В cГіdigo вопроса включают некоторые diГЎlogos и в комментарии в начальный ответ упоминать о том, что хочет включиться ссылка, чтобы загружать произведенный файл.
, Чтобы включать ссылку, (текст cliqueable) в одном diГЎlogo настроенный ("custom dialog") должны использовать HTML Service , потому что mГ©todo alert
sГіlo показывает плоский текст и предопределенные кнопки (SГ, - Не, Соглашаться, Отменять), что были показаны.
Есть несколько способов использовать HTML Service, себе может помещать HTML в файл тип html или могут генерал объект HTMLOutput с основанием String.
Ввиду того, что url, чтобы загружаться, - изменчивый, quizГЎs mГЎs простой состоял в том, чтобы делать HTMLOutput с String, как ты это сделал с сообщением, которое нужно посылать по почте, потому что, если ты предпочитаешь использовать файл deberГЎs использовать шаблоны и scriptlets, что подразумевает больше вещей из-за того, что изучает.
В continuaciГіn очень простой пример cГіmo показывать один dГ-alogo модальный со ссылкой
function mostrarEnlace() {
var url = 'https://es.stackoverflow.com';
var html = '<a href=" + url + " target="_blank">Stack Overflow en español</a>';
var userInterface = HtmlService.createHtmlOutput(html);
var title = "Mostrar enlace";
SpreadsheetApp.getUi().showModalDialog(userInterface, title);
}
Снабжает ссылками
var file = NewFolder.createFile(pdf); 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);
, Но дав клик, меня производит Ошибка 400 (Нот Фоунд)!! 1, ¿ какая-то идея? PD. Не sé có mo реализовывать разрывы pá gina :(
– DxSystem2
29.11.2019, 23:07
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);
– DxSystem2 29.11.2019, 04:15.prompt()
, но идет появляться как текст и не соединение, что ты он можешь кликать. Если ты это хочешь, tendrá s, что создавать что-то в HTML и показывать это сshowModalDialog()
. Но это tambié n идет требовать несколько изменений в có я говорю. – Diego 29.11.2019, 09:52var file = NewFolder.createFile(pdf); 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);
, Но дав клик, меня производит Ошибка 400 (Нот Фоунд)!! 1 – DxSystem2 29.11.2019, 23:06