当前位置: 首页 > 知识库问答 >
问题:

通过电子邮件将Google Sheet范围(带或不带格式)作为Gmail消息中的超文本标记语言表

杜曜灿
2023-03-14

因此,我有一个谷歌电子表格,希望通过使用谷歌电子表格触发器以HTML表格的形式通过电子邮件发送“每日报告”表中的一部分内容来创建自动化的每日报告。

我在工作表中设置了一些条件格式,以使它能够绘制列中所有在所述列中具有MAX(value)的单元格。

我已经成功地创建了下面的代码,通过电子邮件向我发送了范围,但Gmail没有将其识别为HTML表格,而是纯文本。

我尝试在MailApp.send电子邮件函数中使用{htmlBody: htmltable},但Gmail只是出错([Ljava.lang.对象;@SOME_HASH。

问题1:如何将表格作为超文本标记语言发送电子邮件,而不是使用所有可见的超文本标记语言标记的纯文本?

问题2:我如何改进我的代码来获得谷歌表格单元格格式,并将其应用于表格单元格,而不是使用特别的格式来让表格看起来正常?

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})
}

共有1个答案

欧阳正谊
2023-03-14

对于问题1,它应该像不使用数组来保存超文本标记语言表的每行一样简单。只需将它连接成一个字符串,并将其发送出去,就可以正常工作了。

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

不过这里有个主意。可以将Google工作表发布为HTML(在“文件”选项卡下查看)。也许有一种方法可以通过url拉入HTML文件,然后解析到您需要的内容。我只是不知道它是否会携带任何单元格格式。不过值得一看。

编辑(连接):

还添加了一个记录器。记录日志,以便查看最终的htmltable字符串对象是如何生成的。也许可以将该值复制到一个典型的索引中。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})
}

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

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

在查看了下面您的评论所指出的库SheetConverter之后,我能够发送一封格式完美的电子邮件,与我的工作表完全匹配!请参见下面的屏幕截图。

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

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

然后调用该函数

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);
}
 类似资料:
  • 我正在做一个项目,我通过电子邮件发送了来自不同快递公司的收据。这些电子邮件是HTML格式的。 但是,它们并没有都形成特定的结构。每封电子邮件都有不同的格式。我尝试了jshop来提取数据,但很难为每种特定类型的html编写提取。我需要从邮件中提取名称、位置、位置、组织和其他一些细节。我尝试了openNLP,但它不能识别所有位置和名称。如果它是句子形式,它会捕获一些位置。 我可以用html内容创建自己

  • 我想发送包含CSS样式表的超文本标记语言页面到电子邮件帐户。问题是CSS样式表根本不可见。我必须内联每个CSS样式吗?这似乎是非常低效的方法。还有其他想法吗? 以下是发送电子邮件的PHP代码: 我将非常感谢你的帮助。提前谢谢。

  • 问题内容: 在回答的问题表明,在电子邮件正文中添加html-markup可以解决问题。该解决方案正确吗? 但是,如果收件人的电子邮件服务器/客户端不支持HTML电子邮件怎么办? 例如,当使用Apache Commons email时,我将执行以下操作: 如果收件人电子邮件服务器/客户端不支持HTML,有什么方法可以告诉Gmail API退回哪些电子邮件? PS我对Java代码示例特别感兴趣。 谢谢

  • 我有一位客户/朋友正在准备通过agencyaccess发送电子邮件。他们需要一个包含所有内容的html文档,并在一个html文档中包含电子邮件的纯文本版本。我想我有一个基本的理解,但有点困惑。我通常使用Mailchimp来处理我的电子邮件营销。 因此,我们将使用常规的html文档 但是,我们是否在此下方的某个地方为纯文本版本声明了另一种mime类型,然后电子邮件客户端选择要显示的类型?这两者是否都

  • 我有一封预先设计好的HTML电子邮件,我用Komodo edit对它进行了切片和编码。所有内容都在一个表中,和

  • 我试图使用谷歌ap脚本发送超文本标记语言的电子邮件。我有一个谷歌文档上的超文本标记语言,我试图使用下面的代码发送。但是当我发送它时,我收到的是未格式化的文本,显示了所有超文本标记语言标签。有人能告诉我怎么做吗?我不想在脚本中包含超文本标记语言,因为最终会有很多。 var html=UrlFetchApp。取('https://docs.google.com/document/d/documentI