Excel VBA:从在线HTML表中获取内容

时间:2013-04-22 07:14:51

标签: html excel vba dom

任何人都可以请求我显示VBA代码的一部分,这将从这个示例在线HTML表中获得文本“hello”吗?第一个节点将通过他的ID找到(id =“something”)。

...
<table id="something">
  <tr>
    <td><TABLE><TR><TD></TD></TR><TR><TD></TD></TR></TABLE></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td>hello</td>
  </tr>
...

我认为它会像child->sibling->child->sibling->sibling->child,但我不知道确切的方式。

修改 更新的代码标签是CAPITALS。所以如果我使用getElemenetsById("something").getElemenetsByTagName('tr')它只能收集两个tr标签,或者四个(标签是更深的孩子)?

2 个答案:

答案 0 :(得分:5)

如果您确实搜索了答案,则可能希望下次扩大范围。有很多问题和答案都涉及DOM的东西和VBA。

Use getElementById on HTMLElement instead of HTMLDocument

虽然问题(和答案)不是完全您想要的,但它会告诉您如何创建可以使用的内容。

您需要使用getElementById()getElemenetsByTagName()的混合物来检索您想要的“你好”

例如:Document.getElementById("something").getElementsByTagName("tr")(1).getElementsByTagName("td")(2).innerText

  • 获取元素“某事”
  • 在“something”内部获取所有“tr”标签(特别是索引1处的标签)
  • 在返回的tr标签内获取所有“td”标签(特别是索引2处的标签)
  • 获取上一个结果的内部文本

这些对象使用基于0的数组,因此第一项是项目(0)。

<强>更新

document.getElementById()将返回一个(单数)IHTMLElement(包括其所有子节点)或没有/ null(如果它不存在)。

document.getElementsByTagName()将返回IHTMLElement的集合(同样,每个元素都会包含其所有子元素)。 (如果不存在,则为空集合)

document.getElementsByTagName("tr")这将返回“document”元素中的所有tr元素。

document.getElementsByTagName("tr")(0)将从集合中返回第一个(单数)IHTMLElement。 (注意结尾的索引?)

在VBA中没有(我能找到)InternetExplorer对象的“兄弟”功能,所以你必须使用子索引手动完成。

使用DOM函数干净的方法。它比仅仅查看链“Element.Children(0).children(1).children(2)”更清晰,因为你不知道索引意味着什么而不用手动查找它。

答案 1 :(得分:0)

我也在寻找这个问题的答案。我终于通过与同事交谈找到了解决方案,这实际上是通过录制宏来实现的。

我知道,你们都认为自己超越了这一点,但这实际上是最好的方式。请在此处查看完整帖子:http://automatic-office.com/?p=344 简而言之,您想要录制宏并转到数据 - &gt;从网站导航到您的网站,然后选择您想要的表格。

我过去曾使用上面的解决方案“get element by id”类型的东西,这对于一些元素来说很棒,但是如果你想要一个完整的表,并且你没有超级经验,只需记录一个宏。 不要告诉你的朋友,然后重新格式化它看起来像你自己的工作,所以没有人知道你使用宏工具;)