从电子邮件到电子表格复制特定文本(Copy specific text from email mes

2019-10-19 03:10发布

我得到我的支票账户余额每天通过电子邮件发送给我一次。 我想使用谷歌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代码,它不包含余额数,在电子邮件本身显示出来。

我试图在地方getBody的替代getPlainBody,但它返回的登录空值。

张贴在这里的问题是相当多我同样的问题( 谷歌的脚本,我在Gmail中查找文本,并将其添加到电子表格? ),但即使Mogsdad的答复和有用的链接,我一直无法找出什么地方出了错。

谁能帮我重定向如何获得邮件内容,而不是空值吗?

(一旦这样解决了,我不能说对Mogsdad的其他回复的链接是关于如何识别货币,并将其复制到电子表格很清楚,但当然,因为我可以我没能还玩”吨甚至访问内容呢。)

谢谢!


编辑1

见下面关于如何解析HTML说明塞尔的回答。 我用这些功能从Gmail标签/过滤器抓取最新的银行账户余额邮件的文本,并将其拖放到我的电子表格的单元格。

然后我能够使用以下公式在相邻小区中剥离下来,只是货币号码:

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

当然,这对我的作品,因为货币数量总是由$开头(第一,在我的情况下,只有$出现在文本),并始终遵循的CHAR(10)。 任何人试图套用这个公式的需要之前,他们正在寻求隔离值后,类似的一致性。

Answer 1:

你可以试试这个代码片段最初写由科里G于SO摆脱HTML内容的文本。 我用它经常和它工作得很好大部分时间:)(感谢科里)

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


Answer 2:

至于为何getPlainBody()将返回null,则是最有可能是由于在谷歌Apps脚本的错误。 这个问题已经在被提起https://code.google.com/p/google-apps-script-issues/issues/detail?id=3980 。

从该线程:“这似乎影响了邮件包含HTML中的内容可能的解决方法包括使用getBody(),而不是getPlainBody(),并通过HTML解析,直接。”



文章来源: Copy specific text from email message to spreadsheet