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

kou*_*bin 2 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>
...
Run Code Online (Sandbox Code Playgroud)

我认为它会是这样的child->sibling->child->sibling->sibling->child,但我不知道确切的方式.

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

Nic*_*ash 5

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

在HTMLElement上使用getElementById而不是HTMLDocument

虽然问题(和答案)并不完全符合您的要求,但它会告诉您如何创建可以使用的东西.

你需要使用混合物getElementById()getElemenetsByTagName()检索你想要的"你好"

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

  • 得到元素"东西"
  • 在"something"里面得到所有"tr"标签(特别是索引1处的标签)
  • 在返回的tr标签内获取所有"td"标签(特别是索引2处的标签)
  • 获取上一个结果的innerText

这些对象使用基于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)"更清晰,因为你不知道索引意味着什么而不用手动查找它.