email - trucos - hojas de calculo google ejemplos
Correo electrónico de celdas y formato de la hoja de Google (1)
Antecedentes: soy un maestro. Hice una prueba a través de Forms. Califiqué la prueba usando varios colores de fondo en cada celda (que representaba la respuesta a una pregunta de un alumno). Cada fila de la hoja tiene su dirección de correo electrónico en la columna B.
Problema: me gustaría enviar por correo electrónico toda la fila, incluido el formato, a esa dirección en la Columna B para que cada alumno tenga un registro de sus respuestas y de cómo las califiqué.
Pregunta: ¿Cómo puedo enviar una fila de datos por correo electrónico, incluido el formato?
Estoy trabajando con la siguiente secuencia de comandos, que funciona bien para enviar por correo electrónico una sola celda sin formatear:
`function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 1; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 2)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var emailAddress = row[1]; // Second column
var message = row[0]; // I want the whole row, including formatting.
var subject = "Sending emails from a Spreadsheet";
MailApp.sendEmail(emailAddress, subject, message);
ContentService.createTextOutput("hello world!");
}
}`
Aquí está.
Decidí agregar otra función ya que la hace un poco más limpia. Podrás ajustar los estilos de la salida jugando con los estilos css. Si mantiene las líneas comentadas, puede usarlas para la depuración. Probé el código con ellos y se ve bien. Así que déjame saber cómo funciona en los correos electrónicos.
function sendEmails()
{
var br=''<br />'';
var sheet=SpreadsheetApp.getActiveSheet();
var dataRange=sheet.getDataRange();
var dataA=dataRange.getValues();
var backA=dataRange.getBackgrounds();
//var s='''';//Please leave the commented lines. If needed for the future they are handy to have
for (var i=1;i<dataA.length;i++)
{
var emailAddress=dataA[i][1];
var message=formatRow(sheet.getName(),dataA[i],backA[i],dataA[0]);
var subject="Sending emails from a Spreadsheet";
//s+=br + ''<strong>EmailAddress:</strong>'' + emailAddress + br + ''<strong>Subject:</strong>'' + subject + br + message + ''**************************************'' + br;
MailApp.sendEmail({to:emailAddress,subject:subject,htmlBody:message});
}
//var userInterface=HtmlService.createHtmlOutput(s);
//SpreadsheetApp.getUi().showModelessDialog(userInterface, ''Email Message'')
}
Acabo de notar el fondo amarillo, así que rápidamente agregué otra sección para él.
//assume Timestamp,EmailAddres,Score,FirstName,LastName,Section...
function formatRow(sheetName,rowA,rowbackA,titleA)
{
var br=''<br />'';
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(sheetName);
var html='''';
if(rowA && rowbackA)
{
html='''';
for(var j=0;j<rowA.length;j++)
{
switch(rowbackA[j])
{
case ''#ff0000'':
html+=br + ''<span style="font-weight:600;font-size:20px;">'' + titleA[j] + '':</span>'' + br + ''<span style="background-color:#ff0000;">'' + rowA[j] + ''</span>'' + br;
break;
case ''#ffff00'':
html+=br + ''<span style="font-weight:600;font-size:20px;">'' + titleA[j] + '':</span>'' + br + ''<span style="background-color:#ffff00;">'' + rowA[j] + ''</span>'' + br;
break;
case ''#ffffff'':
html+=br + ''<span style="font-weight:600;font-size:20px;">'' + titleA[j] + '':</span>'' + br + ''<span style="background-color:#ffffff;">'' + rowA[j] + ''</span>'' + br;
break
}
}
}
return html;
}
Solo un recordatorio que estoy usando # ff0000 para rojo, así que no cambie a un tono diferente sin hacer un cambio al código.
En caso de que el perro devore el correo electrónico de un alumno, puede enviar solo un correo electrónico.
function sendOneEmail(firstName,lastName)
{
if(firstName && lastName)
{
var br=''<br />'';
var sheet=SpreadsheetApp.getActiveSheet();
var dataRange=sheet.getDataRange();
var dataA=dataRange.getValues();
var backA=dataRange.getBackgrounds();
//var s='''';//Please leave the commented lines. If needed for the future they are handy to have
for (var i=1;i<dataA.length;i++)
{
if(firstName==dataA[i][3] && lastName==dataA[i][4])
{
var emailAddress=dataA[i][1];
var message=formatRow(sheet.getName(),dataA[i],backA[i],dataA[0]);
var subject="Sending emails from a Spreadsheet";
//s+=br + ''<strong>EmailAddress:</strong>'' + emailAddress + br + ''<strong>Subject:</strong>'' + subject + br + message + ''**************************************'' + br;
MailApp.sendEmail({to:emailAddress,subject:subject,htmlBody:message});
}
}
//var userInterface=HtmlService.createHtmlOutput(s);
//SpreadsheetApp.getUi().showModelessDialog(userInterface, ''Email Message'')
}
}
Aquí hay una vista de pájaro de la hoja de cálculo.