通过电子邮件发送Google工作表范围(带或不带格式)作为Gmail邮件中的HTML表格

Exc*_*age 6 html javascript gmail google-sheets google-apps-script

因此,我有一个Google电子表格,并希望通过使用Google电子表格触发器将我的"每日报告"表单中的一部分作为HTML表格通过电子邮件发送来创建自动日常报告.

我在工作表中有一些条件格式,以使其在列中绘制所有列中具有MAX(值)的单元格.

我已设法创建下面的代码,通过电子邮件向我发送范围,但Gmail不会将其识别为HTML表格,而是纯文本.

我尝试在MailApp.sendEmail函数中使用{htmlBody:htmltable},但Gmail只是出错([Ljava.lang.Object; @SOME_HASH.

问题1:如何将表格作为HTML而不是纯文本通过电子邮件发送所有HTML标签?

问题2:我如何改进我的代码以获取Google表格单元格格式并将其应用于表格单元格而不是使用即席格式只是为了让表格看起来不错?

function sendMail(){
 var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
 var data = sh.getRange("A2:O38").getValues();
  //var htmltable =[];

var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;'
var htmltable = ['<table ' + TABLEFORMAT +' ">'];

for (row = 0; row<data.length; row++){

htmltable.push ('<tr>');

for (col = 0 ;col<data[row].length; col++){
  if (data[row][col] === "" || 0) {htmltable.push('<td>' + 'None' + '</td>');} 
  else
    if (row === 0)  {
      htmltable.push ('<th>' + data[row][col] + '</th>');
    }

  else {htmltable.push('<td>' + data[row][col] + '</td>');}
}

     htmltable.push('</tr>');
}

     htmltable.push ('</table>');
     Logger.log(data);
MailApp.sendEmail(Session.getActiveUser().getEmail(), 'Daily report','' ,{htmlBody: htmltable})
}
Run Code Online (Sandbox Code Playgroud)

Ger*_*eio 14

对于问题1,它应该简单到不使用数组来保存HTML表的每一行.只需将它连接成一个字符串并通过它发送它应该工作正常.

至于问题2,我假设您必须检查单元格的某些条件以确定如何格式化表格.我不知道复制所有格式是否有一种确定的简单方法.

这是一个想法.可以将Google表格作为HTML发布(在文件选项卡下查看).也许有办法通过url拉入HTML文件,然后解析你需要的东西.我不知道它是否会继续任何单元格格式化.值得研究一下.

编辑(连接):

还添加了一个Logger.log,以便您可以看到最终的htmltable String对象是如何出现的.也许将该值复制到典型的index.html页面中,看看它是如何正确加载的.

function sendMail(){
 var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var data = sh.getRange("A2:O38").getValues();
  //var htmltable =[];

var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;'
var htmltable = '<table ' + TABLEFORMAT +' ">';

for (row = 0; row<data.length; row++){

htmltable += '<tr>';

for (col = 0 ;col<data[row].length; col++){
  if (data[row][col] === "" || 0) {htmltable += '<td>' + 'None' + '</td>';} 
  else
    if (row === 0)  {
      htmltable += '<th>' + data[row][col] + '</th>';
    }

  else {htmltable += '<td>' + data[row][col] + '</td>';}
}

     htmltable += '</tr>';
}

     htmltable += '</table>';
     Logger.log(data);
     Logger.log(htmltable);
MailApp.sendEmail(Session.getActiveUser().getEmail(), 'Daily report','' ,{htmlBody: htmltable})
}
Run Code Online (Sandbox Code Playgroud)

编辑(测试和工作,见截图):

测试表

测试邮箱

更新(问题2的解决方案):

检查出库SheetConverter从后这里所指出的下方的评论,我是能够发送精确匹配我的表完全格式的电子邮件!请参阅下面的屏幕截图.

片

电子邮件

以下是实现此解决方案的一些代码(请确保首先从上面的链接添加库):

function convSheetAndEmail(rng, email, subj)
{
  var HTML = SheetConverter.convertRange2html(rng);
  MailApp.sendEmail(email, subj, '', {htmlBody : HTML});
}
Run Code Online (Sandbox Code Playgroud)

然后调用该函数:

function doGet()
{
  // or Specify a range like A1:D12, etc.
  var dataRange = SpreadsheetApp.getActiveSpreadsheet().getDataRange();

  var emailUser = 'test@email.com';

  var subject = 'Test Email';

  convSheetAndEmail(dataRange, emailUser, subject);
}
Run Code Online (Sandbox Code Playgroud)