【问题标题】:How to transfer tables in Outlook 2010 emails to Excel 2010如何将 Outlook 2010 电子邮件中的表格传输到 Excel 2010
【发布时间】:2014-03-10 05:23:24
【问题描述】:

我有大约 2000 封电子邮件以 zip 文件的形式发送给我。电子邮件具有以下结构:

http://social.msdn.microsoft.com/Forums/getfile/429285

所有邮件都有相同的主题。从截图可以看出,每封邮件都有多个表。这些表在每封邮件中都有不同的行数。我的任务是将 2000 封邮件中包含的所有这些多个表格放入 excel 中以形成图形和图表。你能帮我解决如何通过自动化来解决这个问题吗?我尝试了一些可用的解决方案,但没有发现可以将 Outlook 电子邮件中的表格传输到 Excel。我有这个任务的最后期限,任何及时的帮助将不胜感激。提前致谢!

【问题讨论】:

  • 邮件是什么格式的? RTF? HTML?
  • 邮件是直接从 Outlook 复制而来。所以它们是 .msg 格式的。
  • 我知道它们是 *.msg 文件,但内容是什么格式?通常,如果它不仅仅是纯文本,它是 HTML 或富文本格式....
  • @TimWilliams 自动生成的邮件是 HTML 格式的。

标签: excel vba email outlook


【解决方案1】:

这对我有用。

在您的 VBA 项目中添加对 Microsoft HTML Object Library 的引用(在 VB 编辑器中的 Tools >> References 下)

假设 Outlook 已经打开,并且您的邮件存储在路径 MSG_PATH

Sub Tester()

Const MSG_PATH As String = "C:\_Stuff\test\mails\"

Dim ol, m, t, r, c
Dim doc As New MSHTML.HTMLDocument
Dim rng As Range, rw As Object
Dim f

    Set ol = GetObject(, "outlook.application")

    Set rng = ActiveSheet.Range("B2")

    f = Dir(MSG_PATH & "*.msg")

    Do While Len(f) > 0

        Set m = ol.CreateItemFromTemplate(MSG_PATH & f)
        doc.body.innerHTML = m.htmlbody
        m.Close False

        For Each t In doc.getElementsByTagName("table")
            rng.Offset(0, -1).Value = f
            For r = 0 To t.Rows.Length - 1
                Set rw = t.Rows(r)
                For c = 0 To rw.Cells.Length - 1
                    'ignore any problems with merged cells etc
                    On Error Resume Next
                    rng.Offset(r, c).Value = rw.Cells(c).innerText
                    On Error GoTo 0
                Next c
            Next r
            Set rng = rng.Offset(t.Rows.Length + 5)
        Next t

        f = Dir()
    Loop

End Sub

【讨论】:

  • 谢谢@TimWilliams!我尝试使用上面的代码。但是,我不断收到错误“编译错误:未定义用户定义的类型”。然后编译器突出显示以下行: Dim doc As New MSHTML.HTMLDocument 我尝试了为此类错误提供的几种解决方案,例如添加引用或首先将其定义为对象。但他们都没有工作。你能告诉我哪里出错了吗?
  • 抱歉 - 忘了提及您需要在您的 VBA 项目中添加对 Microsoft HTML Object Library 的引用(工具 >> VB 编辑器中的引用)
  • 非常感谢!这非常有效。非常感谢您的及时回复:)
  • @TimWilliams 运行此代码时出现错误 ActiveX 组件无法创建对象(错误 429)
猜你喜欢
  • 2013-01-11
  • 2023-03-24
  • 1970-01-01
  • 2011-12-15
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
相关资源
最近更新 更多