2017-03-07 74 views
0

语境解析HTML格式的电子邮件(不是URL)进入VBA

我收到格式化为HTML格式的电子邮件。 电子邮件里有一个表格。 我想解析表格,以便可以访问表格中的单个单元格。

按上使无数的问题和答案,我已经发现,访问这个办法是做这样的事情:

objIE.document.getElementsByTagName("td") 

...这将创造一个阵列(组) HTML文件中的列。所以这是排序。

问:

相反objIE.document的。在众多的SO例子中指出了一些URL,我想在这个特定情况下将它指向电子邮件。在这种特定的情况下,我的电子邮件被称为我已经做作出“消息”:

Dim Msg As Outlook.MailItem 

在我的代码,因此我做了以下内容:

Msg.Body.getElementsByTagName ("td") 

不过,我得到一个错误说“无效限定符“错误在试图运行时在该行上。

关于如何访问表单元格/元素的任何想法?

+0

您是否尝试过使用[的MailItem(HTTPS的[H​​TMLBody(https://msdn.microsoft.com/en-us/library/office/ff868941.aspx)属性:// MSDN。 microsoft.com/en-us/library/office/ff861332.aspx)? –

+0

我似乎离得更近了一步。测试= item.HTMLBody的作品,当我控制台注销它显示一个大的HTML消息,谢谢。现在,当我做Testing.getElementsByTagName(“p”)(0)我应该得到电子邮件的第一段,但得到一个错误“无效限定符” –

回答

0

下面是一个应该让你非常接近的方法。你想要做的就是将电子邮件的HTML存储到一个HTML文件中,这样你可以使用元素选择器来找到你感兴趣的东西。这段代码需要对Outlook对象的引用。

这里是一个简单的例子。

Option Explicit 

Public Sub SOTest() 
    Dim outlook  As outlook.Application 
    Dim ns   As outlook.NameSpace: Set ns = GetNamespace("MAPI") 
    Dim folder  As outlook.MAPIFolder: Set folder = ns.PickFolder 
    Dim item  As outlook.MailItem 
    Dim html  As Object: Set html = CreateObject("htmlfile") 
    Dim elements As Object 
    Dim element  As Object 

    For Each item In folder.Items 
     If item.Class = olMail Then ' Make sure it's a Mail Item...change if not needed 
      html.Body.Innerhtml = item.HTMLBody ' set the body of the email equal to the html from outlook email 
      Set elements = html.getElementsByTagName("td") 
      For Each element In elements 
       Debug.Print element.InnerText 
      Next 
     End If 
    Next 

End Sub