VBA使用模式文件提取数据

时间:2014-02-23 19:22:05

标签: xml excel vba excel-vba

我有以下代码

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

user2140261

的评论

当您的网站已经为您制作了一个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),我得到了这个:

enter image description here

这怎么可能?我打开Schema file,看到根节点是一个,它是Schema

enter image description here

虽然合理的是: ...如果已经制作了一个,那么让excel猜测(当你只导入一个XML文件时Excel会为你制作一个Schema)是没有意义的。< / em>的

当我导入XML file时,我有一个根节点。这是根节点xbrl,它让我很容易理解。现在我得到了第一张图片中看到的碎片以及非常长的运行时间。

  • 你相信我应该/必须引用不同的根节点吗? 想要导入不同的数据吗?

  • 我如何使用守卫的数据代理商的现成架构 我反对错误?

  • 如何将所有这些节点放在一个根节点下(如excel所做的那样) 当我在XML Maps中导入XML文件时,而不是有很多root 节点,同时使用Schema?

我希望这个问题的编辑不再对我来说是一个沉重的惨败,因为这个问题的前三个编辑的解决方案在我眼前是相当的。

1 个答案:

答案 0 :(得分:1)

该站点上引用的XML-Schema是一个野兽(考虑到XML-Schema易于构建)。这个模式导入了几个额外的模式(更进一步,xs:import ...),这可能解释了可用的其他模式。

另一方面:尽管Excel生成的自动XML-Schema确实有时不完整或完全准确(类型),但我仍会使用此模式 - 如有必要,可进行一些更正(请参阅Exporting XML from Excel and Keeping Date Format)。

除此之外,我无法弄清楚你想要完成什么,尽管使用MSXML下载文件似乎是一个非常合理的建议。

对不起,这是肤浅的答案。我希望它有所帮助或提供一些线索。 安德烈亚斯