将特定文本从电子邮件复制到电子表格

时间:2013-12-17 20:45:18

标签: email google-apps-script

我每天都会通过电子邮件向我发送一次支票帐户余额。我想使用Google Apps脚本从电子邮件中提取余额并将其插入我的支票帐户电子表格中。我是编码的新手,但到目前为止,我已经想出了如何执行以下操作,这会让我记录正确的电子邮件消息的HTML代码:

function myFunction() {
 var thread = GmailApp.getUserLabelByName("CHK BAL").getThreads(0,1)[0]; // get first thread in inbox
 var message = thread.getMessages()[0]; // get first message
 Logger.log(message.getBody()); // log contents of the body
}

但是,因为此方法返回电子邮件的HTML代码而不是实际的邮件文本,所以它不包含电子邮件本身中显示的余额编号。

我尝试用getPlainBody代替getBody,但它在Log中返回一个空值。

这里发布的问题几乎是同一个问题(Google script that find text in my gmail and adds it to a spreadsheet?),但即使有了Mogsdad的回复和有用的链接,我也无法弄清楚出了什么问题。

有人可以帮我重定向如何获取电子邮件内容而不是空值吗?

(一旦解决了,我不能说Mogsdad的其他回复链接非常清楚如何识别货币并将其复制到电子表格中,但当然我还没有玩过我甚至无法访问内容。)

谢谢!


编辑1

有关如何解析HTML的说明,请参阅下面的Serge的答案。我使用这些功能从Gmail标签/过滤器中获取最新的银行帐户余额电子邮件的文本,然后将其放入电子表格中的单元格中。

然后,我可以在相邻的单元格中使用以下等式将其剥离为货币编号:

左(右(A5,LEN(A5)-find( “$”,A5)),FIND(CHAR(10),RIGHT(A5,LEN(A5)-find( “$”,A5))) -1)0

当然,这对我有用,因为货币编号总是以$开头(第一个,在我的情况下,只有$出现在文本中),后面总是跟着CHAR(10)。任何试图应用这个公式的人都需要在他们寻求分离的价值之前和之后保持相似的一致性。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用此代码段originally written by Corey G on SO从html内容中获取文本。我经常使用它并且它大部分时间都很好用:)(感谢Corey)

function getTextFromHtml(html) {
  return getTextFromNode(Xml.parse(html, true).getElement());
}


function getTextFromNode(x) {
  switch(x.toString()) {
    case 'XmlText': return x.toXmlString();
    case 'XmlElement': return x.getNodes().map(getTextFromNode).join('');
    default: return '';
  }
}

尝试它的测试功能:

function test(){
  var html = GmailApp.getInboxThreads()[0].getMessages()[0].getBody();
  throw(getTextFromHtml(html));
}

答案 1 :(得分:0)

至于为什么getPlainBody()返回null,很可能是由于Google Apps脚本中的错误。该问题已在https://code.google.com/p/google-apps-script-issues/issues/detail?id=3980提交。

从该主题开始:"受影响的邮件似乎在其内容中包含HTML。一个可能的解决方法是使用getBody()而不是getPlainBody()并直接通过HTML解析。"