我有以下代码
Option Explicit
Sub MadMule2()
Dim IE As InternetExplorer
Dim el
Dim els
Dim colDocLinks As New Collection
Dim Ticker As String
Dim lnk
Dim intCounter as Integer
Set IE = New InternetExplorer
IE.Visible = False
Ticker = Worksheets("Sheet1").Range("A1").Value
LoadPage IE, "https://www.sec.gov/cgi-bin/browse-edgar?" & _
"action=getcompany&CIK=" & Ticker & "&type=10-Q" & _
"&dateb=&owner=exclude&count=20"
Set els = IE.document.getElementsByTagName("a")
For Each el In els
If Trim(el.innerText) = "Documents" Then
colDocLinks.Add el.href
End If
Next el
intCounter = 1
For Each lnk In colDocLinks
LoadPage IE, CStr(lnk)
For Each el In IE.document.getElementsByTagName("a")
If el.href Like "*[0-9].xml" Then
ActiveWorkbook.XmlMaps.Add(el, "xbrl").Name = "xbrl Map"
End If
Next el
Next lnk
End Sub
Sub LoadPage(IE As InternetExplorer, URL As String)
IE.navigate URL
Do While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
End Sub
的评论
当您的网站已经为您制作了一个Schema时,为什么还要使用XML文件来获取Schema?当已经制作一个时,让excel猜测制作一个没有意义。 AS excel可能做错了,你可能永远不会发现错误。
让我尝试使用数据代理的Schema创建一个XML Map到Excel,只需更改此语句:
If el.href Like "*.xsd" Then
和本声明
ActiveWorkbook.XmlMaps.Add(el, "Schema").Name = "xbrl Map " & intCounter
然而,当我尝试这样做时(通过转到XML任务窗格,推送Source,然后推送XML Maps),我得到了这个:
这怎么可能?我打开Schema file,看到根节点是一个,它是Schema
虽然合理的是: ...如果已经制作了一个,那么让excel猜测(当你只导入一个XML文件时Excel会为你制作一个Schema)是没有意义的。< / em>的
当我导入XML file时,我有一个根节点。这是根节点xbrl
,它让我很容易理解。现在我得到了第一张图片中看到的碎片以及非常长的运行时间。
你相信我应该/必须引用不同的根节点吗? 想要导入不同的数据吗?
我如何使用守卫的数据代理商的现成架构 我反对错误?
如何将所有这些节点放在一个根节点下(如excel所做的那样) 当我在XML Maps中导入XML文件时,而不是有很多root 节点,同时使用Schema?
我希望这个问题的编辑不再对我来说是一个沉重的惨败,因为这个问题的前三个编辑的解决方案在我眼前是相当的。
答案 0 :(得分:1)
该站点上引用的XML-Schema是一个野兽(考虑到XML-Schema易于构建)。这个模式导入了几个额外的模式(更进一步,xs:import ...),这可能解释了可用的其他模式。
另一方面:尽管Excel生成的自动XML-Schema确实有时不完整或完全准确(类型),但我仍会使用此模式 - 如有必要,可进行一些更正(请参阅Exporting XML from Excel and Keeping Date Format)。
除此之外,我无法弄清楚你想要完成什么,尽管使用MSXML下载文件似乎是一个非常合理的建议。
对不起,这是肤浅的答案。我希望它有所帮助或提供一些线索。 安德烈亚斯