如何使用Google电子表格内容将TABLE HTML格式保留在Gmail中

时间:2013-11-17 16:01:19

标签: google-apps-script google-sheets

我正在尝试开发一个脚本,该脚本会自动发送电子邮件,其中包含来自Google电子表格的表格,我也希望将原始表格格式/颜色保留在电子邮件中。 为此,我使用了UrlFetchApp和mailApp,如下所示:

var url = 'my google doc publish url';
var requestData = googleOAuth_('docs','https://docs.google.com/feeds/');
var response = UrlFetchApp.fetch(url1, requestData);
var me = Session.getEffectiveUser().getEmail();
var html = response.getContentText();
MailApp.sendEmail(me, 'Email subject', 'no html :( ', {'htmlBody':html}); 

这实际上有效,我可以收到包含我需要的所有表格数据的电子邮件。但是,电子邮件中的所有表格格式和颜色信息都会丢失。进一步调查显示,这可能是因为Gmail在进行HTML呈现时不支持<style> </style>标记。不幸的是,已发布的谷歌电子表格正在使用它。以下是一个例子:

<div id="content"><style>.tblGenFixed td {padding:0 3px;overflow:hidden;white-space:normal;letter-spacing:0;word-spacing:0;background-color:#fff;z-index:1;border-top:0px none;border-left:0px none;border-bottom:1px solid #CCC;border-right:1px solid #CCC;} .dn {display:none} .tblGenFixed td.s0 {background-color:#b6d7a8;font-family:calibri,arial,sans,sans-serif;font-size:100.0%;font-weight:bold;font-style:normal;color:#000000;text-decoration:none;text-align:left;vertical-align:bottom;direction:auto-ltr;white-space:normal;overflow:hidden;border-top:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-left:1px solid #000000;} .tblGenFixed td.s2 {background-color:#b6d7a8;font-family:calibri,arial,sans,sans-serif;font-size:100.0%;font-weight:bold;font-style:normal;color:#000000;text-decoration:none;text-align:center;vertical-align:bottom;direction:auto-ltr;white-space:normal;overflow:hidden;border-top:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;} .tblGenFixed td.s1 {background-color:#b6d7a8;font-family:calibri,arial,sans,sans-serif;font-size:100.0%;font-weight:bold;font-style:normal;color:#000000;text-decoration:none;text-align:left;vertical-align:bottom;direction:auto-ltr;white-space:normal;overflow:hidden;border-top:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;} </style><table dir='ltr' border=0 cellpadding=0 cellspacing=0 class='tblGenFixed' id='tblMain'><tr class='rShim'><td class='rShim' style='width:0;'><td class='rShim' style='width:121px;'><td class='rShim' style='width:353px;'><td class='rShim hdn' style='display:none;width:62px;'><td class='rShim' style='width:87px;'><tr dir='ltr'><td class=hd><p style='height:50px;'>.</td><td  dir='ltr' class='s0'>Key<td  dir='ltr' class='s1'>Summary<td  dir='ltr' class='s2 dn'>Labels<td  dir='ltr' class='s2'>Status</tr></table></div>

但是,如果我尝试将Google电子表格中的表格复制并粘贴到Gmail,它实际上会在发件人和收件人方面正确显示,这让我感到困惑。所以我使用GmailApp检查那里的HTML源代码。

var drafts = GmailApp.getDraftMessages();
var body = drafts[i].getBody();
MailApp.sendEmail('example@google.com','test email','no html',{htmlBody:body});

从调试开始,我可以观察到这封电子邮件的HTML内容(通过直接从谷歌电子表格到gmail编辑器的复制和粘贴表)如下所示:

<div dir=""ltr""><table cellspacing=""0"" cellpadding=""0"" dir=""ltr"" style=""table-layout:fixed;font-size:13px;font-family:arial,sans,sans-serif""><colgroup><col width=""121""><col width=""353""><col width=""87""><col width=""113""><col width=""74""></colgroup><tbody><tr style=""height:51px"">
<td style=""vertical-align:bottom;direction:ltr;background-color:rgb(182,215,168);font-family:calibri,arial,sans,sans-serif;font-weight:bold;border:1px solid rgb(0,0,0);padding:0px 3px"">Key</td>
<td style=""border-bottom-width:1px;border-top-style:solid;direction:ltr;background-color:rgb(182,215,168);border-right-style:solid;font-weight:bold;padding:0px 3px;border-bottom-color:rgb(0,0,0);border-top-width:1px;vertical-align:bottom;border-bottom-style:solid;border-top-color:rgb(0,0,0);border-right-color:rgb(0,0,0);border-right-width:1px;font-family:calibri,arial,sans,sans-serif"">Summary</td>

所以我相信Gmail在粘贴发生时会进行一些自动转换。所以我的问题是如何使用Google脚本进行类似的转换?

1 个答案:

答案 0 :(得分:1)

没有自动化方法可以从天然气中做到这一点。您需要获取每个单元格格式并将其转换为一个非常简单的html表格(合并单元格和其他非平凡的转换)。