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

任何人都可以请求让我看看VBA代码的一部分,这将从这个例子在线HTML表格中得到文本“你好”? 第一个节点将被他的ID(id =“something”)find。

... <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标签集合,或四个(标签是更深的孩子)?

如果您确实search了答案,那么您可能希望下次拓宽范围。 有很多问题和答案,处理DOM的东西和VBA。

在HTMLElement上使用getElementById而不是HTMLDocument

虽然问题(和答案)不完全是你想要的,它会告诉你如何创build你可以使用的东西。

您将需要使用getElementById()getElemenetsByTagName()来检索所需的“hello”

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

  • 获取元素“东西”
  • 里面的“东西”得到所有“TR”标签(特别是在索引1)
  • 在返回的tr标签里面,得到所有的“td”标签(特别是索引2的标签)
  • 获取以前结果的innerText

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

更新

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

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

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

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

在VBA中没有(我可以find)InternetExplorer对象的“兄弟”function,因此您必须使用子索引手动执行此操作。

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

我也仔细查看了这个问题的答案。 我终于find了一个解决scheme,通过与一个同事通话,而这个同事实际上是通过录制一个macros。

我知道,你们都认为你们高于此,但实际上这是最好的办法。 看到完整的post在这里: http : //automatic-office.com/?p=344总之,你想loggingmacros,并从数据 – >从网页导航到您的网站,并select你想要的表。

我已经使用了上面的解决scheme,“过去一个一个的获取ID”types的东西,这对于一些元素来说是很好的,但是如果你想要一个整个表,而且你不是超级有经验的,那么只需要logging一个macros。 不要告诉你的朋友,然后重新格式化它看起来像你自己的工作,所以没有人知道你使用macros工具;)