Para poder enviar por email un rango de una planilla donde se genera un informe, copiando datos desde otra planilla, importando de una API, aplicando filtros, podemos genera un script que copie las celdas y las envie como una tabla.
Planilla de ejemplo:
https://docs.google.com/spreadsheets/d/1Y6GK1Dqm1tyMrVvyhPfAwhGWdIhpLBXezW3dNCJW2w0/edit#gid=0
Lo que necesitamos es crear rangos con nombres en la planilla, los cuales luego obtendremos desde apps script para copiar las celdas:
Hecho esto utilizaremos los nombres de los rangos en el codigo de apps script:
// Rango de datos que sera copiado como tabla
var hojaInforme = 'Informe';
var rangosDatos = {
0 : 'RangoNombre1',
1 : 'RangoNombre2',
};
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})
}
La funcion getHtmlTable() es una funcion auxiliar que copia celdas y las transforma en HTML.
Aunque los rangos con nombre sean modificamos o cambien de ubicacion, el script podra ubicarlos y copiar los contenidos, aun si se agregan celdas dentro del rango!