3

任何人都可以向我展示 VBA 代码的一部分,它将从这个示例在线 HTML 表中获取文本“你好”吗?第一个节点将通过他的 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,但我不知道确切的方式。

编辑 更新的代码标签是大写。所以如果我使用getElemenetsById("something").getElemenetsByTagName('tr')它只收集两个 tr 标签,或者四个(带有更深的孩子的标签)?

4

2 回答 2

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 的数组,因此第一项是 item(0)。

更新

document.getElementById()将返回一个(单数) IHTMLElement (将包括其所有子元素),如果不存在则返回 nothing/null。

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

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

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

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

使用 DOM 函数一种简洁的方法。它比仅查看链“Element.Children(0).children(1).children(2)”要清晰得多,因为如果不手动查找索引,您将不知道索引的含义。

于 2013-04-22T11:14:55.320 回答
1

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

我知道,你们都认为你在这之上,但它实际上是最好的方法。在此处查看完整的帖子:http ://automatic-office.com/?p=344 简而言之,您想要记录宏并转到数据 --> 从 web 并导航到您的网站并选择您想要的表格。

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

于 2013-10-09T15:09:03.203 回答