Dentro de los automatismos de las planillas el lograr que los informes se completen solos es el primer paso, el segundo es lograr que los informes se envían solos. Para esto crearemos un script que envíe rangos de celdas por email a pedido del usuario.
Los rangos de celdas pueden ser definidos con coordenadas o bien con nombres de forma que si se agregan filas o columnas la referencia al rango sigue funcionando.
var emailRecipient = '[email protected]';
var emailTitle = 'Rango de celdas como tabla';
// Rango de datos que sera copiado como tabla
var hojaInforme = 'Informe';
var rangosDatos = {
0 : 'RangoNombre1',
1 : 'RangoNombre2',
};
// Preparamos menu para que el usuario pueda actualizar desde la planilla sin entrar al editor de codigo
function onOpen() {
// La función onOpen se ejecuta automáticamente cada vez que se carga un Libro de cálculo
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
menuEntries.push({
name : "Enviar Email",
functionName : "enviarEmail"
});
menuEntries.push(null);
ss.addMenu("Actualizar", menuEntries);
}
function enviarEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActive().getSheetByName(hojaInforme);
var name = SpreadsheetApp.getActiveSpreadsheet().getName();
var subject = emailTitle + ' ';
subject += new Date().toISOString().split('T')[0];
var body = '<html><body><div style="text-align:center;display: inline-block;font-family: arial,sans,sans-serif">'
var iLoop = 1;
for (var key in rangosDatos) { // OK in V8
var value = rangosDatos[key];
Logger.log("value = %s", value);
body += '<H2>Titulo ' + iLoop + '</H2>';
var rango1 = sheet.getRange(value);
body += getHtmlTable(rango1);
iLoop++;
}
body += '</div></body></html>';
GmailApp.sendEmail(emailRecipient, subject, "Requires HTML", {htmlBody:body})
}
Para ver el codigo de conversion de rango de celdas a tabla HTML, la funcion getHtmlTable, pueden hacerlo en la siguiente entrada: