在我之前的问题中(需要的一切都在这个问题上;为了完整和衡量,此处提供了链接)我要求一种将 XML 数据从 Web 位置拉到 Excel 的方法。我收到的代码(由user2140261提供)作为答案在这里:
Sub GetNode()
Dim strXMLSite As String
Dim objXMLHTTP As MSXML2.XMLHTTP
Dim objXMLDoc As MSXML2.DOMDocument
Dim objXMLNodexbrl As MSXML2.IXMLDOMNode
Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode
Set objXMLHTTP = New MSXML2.XMLHTTP
Set objXMLDoc = New MSXML2.DOMDocument
strXMLSite = "http://www.sec.gov/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml"
objXMLHTTP.Open "POST", strXMLSite, False
objXMLHTTP.send
objXMLDoc.LoadXML (objXMLHTTP.responseText)
Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("xbrl")
Set objXMLNodeDIIRSP = objXMLNodexbrl.SelectSingleNode("us-gaap:DebtInstrumentInterestRateStatedPercentage")
Worksheets("Sheet1").Range("A1").Value = objXMLNodeDIIRSP.Text
End Sub
但是每家公司都有不同的 XML 实例文档,并且公司在每个时间段发布不同的 XML 实例文档(例如,每季度、每年)。因此,可以在不同的Web 位置访问这些文档。
现在在前面的过程中我们可以看到我们只需要使用语句
strXMLSite = "http://www.sec.gov/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml"
...但这是当我们事先知道我们需要来自 Web 中一个指定位置的数据时
如果我们想为下图中用星号 (*) 描绘的这 4 个不同位置提取一些数据怎么办?
我们如何在 Excel 中实际输入我们的“坐标”,例如在我们的一个用户窗体/单元格中,然后使用这些坐标使 VBA 在那里“导航/爬行”,就像我们使用浏览器导航一样?
我们输入的坐标可以是:
- 股票代码(例如特斯拉汽车的 TSLA)
- 一种文件类型,例如 10-Q's
您可以在这些链接中分别为 BDX 和 ANN 选择文件类型:
下面我们有 2 个 Web 位置用于 BDX 公司的 Instance Document 位置,2 个用于 ANN 公司
BDX公司
http://www.sec.gov/Archives/edgar/data/10795/000119312514042815/bdx-20131231.xml http://www.sec.gov/Archives/edgar/data/10795/000119312513318898/bdx-20130630.xml
安公司
http://www.sec.gov/Archives/edgar/data/874214/000087421413000036/ann-20131102.xml http://www.sec.gov/Archives/edgar/data/874214/000087421413000027/ann-20130803.xml
我们如何从所有四个实例文档中都存在的 XML 元素中提取,例如us-gaap:CommonStockValue
通过简单地给 VBA
- 股票行情
- 文件类型(10-K、10-Q)
是否可以使用Microsoft XML Core Services (MSXML)来完成,或者我们也需要一些其他库?
您可以看到触发此代码数千次并且每次都将 URL 从 Web 浏览器复制到 strXMLSite 作为字符串值是多么不切实际......