任何人都可以请求我显示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标签,或者四个(标签是更深的孩子)?
答案 0 :(得分:5)
如果您确实搜索了答案,则可能希望下次扩大范围。有很多问题和答案都涉及DOM的东西和VBA。
Use getElementById on HTMLElement instead of HTMLDocument
虽然问题(和答案)不是完全您想要的,但它会告诉您如何创建可以使用的内容。
您需要使用getElementById()
和getElemenetsByTagName()
的混合物来检索您想要的“你好”
例如:Document.getElementById("something").getElementsByTagName("tr")(1).getElementsByTagName("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)”更清晰,因为你不知道索引意味着什么而不用手动查找它。
答案 1 :(得分:0)
我也在寻找这个问题的答案。我终于通过与同事交谈找到了解决方案,这实际上是通过录制宏来实现的。
我知道,你们都认为自己超越了这一点,但这实际上是最好的方式。请在此处查看完整帖子:http://automatic-office.com/?p=344 简而言之,您想要录制宏并转到数据 - &gt;从网站导航到您的网站,然后选择您想要的表格。
我过去曾使用上面的解决方案“get element by id”类型的东西,这对于一些元素来说很棒,但是如果你想要一个完整的表,并且你没有超级经验,只需记录一个宏。 不要告诉你的朋友,然后重新格式化它看起来像你自己的工作,所以没有人知道你使用宏工具;)