【问题标题】:Extracting table data from Outlook email body从 Outlook 电子邮件正文中提取表格数据
【发布时间】:2020-06-28 17:39:09
【问题描述】:

我收到 Outlook 电子邮件,如果 正文 包含一个由多个字符串 Labels 和相关字符串 Text 组成的表格。我想提取三个与相应 Label 关联的 Values。前两次搜索是 Labelright 列,最后一个搜索是 Label below 的一行。 我尝试了 InStr(),它非常适合检索 Labelright,但它似乎不适用于 Value 标签下方的一个单元格。 我可以在 Outlook VBA 中使用 Excel/Work 中的 MoveRightMoveDown 还是使用“Range(Rng.Offset (0, 1).Address).Value”和“Range(Rng.Offset(1, 0).Address).Value”选择Value到Outlook VBA 中的 em>right 和 below。 这里的关键是它是电子邮件正文中的结构化表格。

【问题讨论】:

  • 是正文格式的 HTML 还是 RichText ?
  • 这会给你表格对象Application.Inspectors(1).WordEditor.tables(1) .... 在观察窗口中检查它
  • 我会检查,但我认为 RichTest 不允许使用表格。

标签: vba email outlook


【解决方案1】:

我有一封电子邮件,其中一个表格恰好嵌套在另一个表格中

这就是为什么使用Tables(1).Tables(1)

以下代码用于探索表格。

第一行突出显示表格中的单元格,以便您检查是否引用了正确的单元格

第二行和第三行展示了如何获取表格单元格的值

不要尝试在监视窗口或本地窗口中检查任何range 对象。它会导致前景崩溃。 (不知道为什么)

如果您想探索range 对象的任何属性,请将电子邮件正文复制到 msWord。检查范围对象时不会崩溃

我找不到任何与列标题相关的内容

Sub aaaaa()

    Application.Inspectors(1).WordEditor.Tables(1).Tables(1).Rows(1).Cells(1).Select
    stop
    Debug.Print Application.Inspectors(1).WordEditor.Tables(1).Tables(2).Rows(3).Cells(4).Range.Text
    Debug.Print ActiveDocument.Tables(1).Tables(1).Cell(1, 1).Range.Text

End Sub

【讨论】:

  • jsotola:感谢您的回复。是的 Outlook 是 VBA 中的熊。我对 Debug.Print 不太满意,但我会试一试。理想的是找到相应的标签单元格,即名称、日期、地址。测试将验证它是否有效。实际的 name 是右侧的一个单元格,实际的 date 是右侧的一个单元格,但 address 是标签下方的一个单元格并且可以在一个单元格中包含 1、2 或 3 行条目。
  • 所有debug.print 所做的,就是打印到“即时窗口”中......没有什么不舒服的地方......它比msgbox 更好,因为工作表没有获得焦点每次你想要一个输出......它也允许debug.print "abc", 123; 456, 789
  • Jsotola:我使用双表 (1) 运行代码。
  • Jostola:结果是“运行时错误 440,数组索引超出范围”。如果我将 .Inspector(1) 更改为 .Inspector,则错误更改为错误 438,Object 不支持此属性或方法。并将一个表(2)更改为表(1)没有效果。恢复到 .Inspector(1) 将错误恢复为 440。
  • Jostola:第一个.Table(1).Table(1) 的原因是为了解决?eMail?作为一个表,第二个 .Table(1) 作为 .Body?我从没想过电子邮件是一张表格,但它解释了很多代码推荐和结构(如果它是真的)。​​
猜你喜欢
  • 2015-07-09
  • 2011-08-24
  • 2018-11-10
  • 2021-01-17
  • 2020-08-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多