Как обеспечить, чтобы Script отправлял электронное письмо, содержащее таблицу HTML с полным диапазоном данных? - PullRequest
0 голосов
/ 23 марта 2019

Я создал функцию, которая позволит мне отправлять электронные письма в список контактов через Google Sheets. Письмо будет содержать строку темы и таблицу, содержащую данные из моей электронной таблицы. Проблема, с которой я сталкиваюсь, заключается в том, что таблица HTML отправляет только заголовки и 1 строку данных. Я не могу найти ошибку, которую я сделал.

Таблица будет постоянно увеличиваться, поэтому я хотел бы, чтобы функция электронной почты включала все ячейки, в которых есть данные. Это возможно?

Я адаптировал этот код сценария / HTML из Как отформатировать электронную почту из данных электронной таблицы, используя массивы? , но теперь я застрял, как внести дальнейшие изменения в мои потребности.

function testMail(){
  var emails = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Contacts");
  var startRow = 2; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A1:B1
  var dataRange = emails.getRange(startRow, 1, numRows, 1);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var subject = "Current list of BGC 4 Acronyms";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var acronym = ss.getSheetByName("Sheet1");
  var abbv = acronym.getRange("A5:A50").getValues();
  var explan = acronym.getRange("B5:B50").getValues();

  var message = composeMessage(abbv,explan);
  var messageHTML = composeHtmlMsg(abbv,explan);
  Logger.log(messageHTML);
  MailApp.sendEmail(emailAddress, subject, message, {'htmlBody':messageHTML});
}

function composeMessage(abbv,explan){
  var message = 'Here are the data you submitted :\n'
  for(var c=0;c<explan[0].length;++c){
    message+='\n'+abbv[0][c]+' : '+explan[0][c]
  }
  return message;
}

function composeHtmlMsg(abbv,explan){
  var message = '<br><br><table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 5><th>Acronym</th><th>Explanation</th><tr>'
  for(var c=0;c<explan[0].length;++c){
    message+='<tr><td>'+abbv[0][c]+'</td><td>'+explan[0][c]+'</td></tr>'
  }
  return message+'</table>';
}

Ожидаемым результатом является электронное письмо, отправленное на каждый адрес в списке с темой и полной таблицей данных. Что я на самом деле получаю, это

Email received via script

1 Ответ

0 голосов
/ 23 марта 2019

Попробуйте изменить это:

for(var c=0;c<explan[0].length;++c){
    message+='\n'+abbv[0][c]+' : '+explan[0][c]
  }

На это:

Я предполагаю, что abbv и объяснение являются столбцами.

for(var c=0;c<explan.length;c++){
    message+='<br />' + abbv[c][0]+ ' : ' + explan[c][0];
  }

Попробуйте это:

function composeHtmlMsg(abbv,explan){
  var message = '<br><br><table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 5><th>Acronym</th><th>Explanation</th><tr>'
  for(var c=0;c<explan.length;c++){
    message+='<tr><td>'+abbv[c][0]+'</td><td>'+explan[c][0]+'</td></tr>'
  }
  return message+='</table>';
}

На основании вашего образца электронной таблицы, я думаю, это может сработать:

var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var rg1=sh.getRange(5,1,sh.getLastRow()-4,1);
var rg2=sh.getRange(5,2,sh.getlastRow()-4,1);
var explan=rg1.getValues();
var abbv=rg2.getValues();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...