2013-12-16 36 views
1

我想拉抵押贷款利率从银行网站到Excel 2010。这是适用的网站:http://www.bmo.com/home/personal/banking/rates/mortgagesExcel网络查询动态数据

我创建在Excel Web查询来做到这一点:(数据 - - >从网页 - >“网站”)。通过浏览器查看,页面显示实际费率。在Excel中,我只得到这样的占位符:

Mortgage Rates 
5 year Low Rate (closed) %* 
Prime Rate     % 

问题似乎是Excel无法识别网页上的动态内容。如果我“查看源文件”感兴趣的数据,我看到的是,利率是由JavaScript的变量填充:

<td class="ratesSubLabel">Prime Rate</td> 
<td class="rate"><script type="text/javascript">document.write(prime.value);</script>%</td> 

任何人都可以在这方面帮助?

+1

Web查询将不能工作,因为数据表是通过JSON一旦HTML页面通过http://www.bmo.com/bmocda/templates/json_mortgage_include.jsp链路负载到来。 – Santosh

+0

@Santosh - 感谢您的光临。 – Roberto

回答

2

我从来没有真正使用网络源类型的东西(它从来没有工作过,我想如何)。

您可以使用VBA将页面中的数据拖放到Excel中。

以下内容应从网站上的表格中读取数据并将结果打印到sheet1中。

' The following code should be put in a new code module 
' Requires "Microsoft Internet Controls" and "Microsoft HTML Object Library" References 
Sub Main() 
Dim Browser As InternetExplorer 
Dim Document As HTMLDocument 
Dim Element As IHTMLElement 
Dim Elements As IHTMLElementCollection 
Dim Child As IHTMLElement 
Dim Children As IHTMLElementCollection 
Dim Row As Integer 
Dim Column As Integer 
Row = 1 
Set Browser = New InternetExplorer 
Browser.Navigate "www.bmo.com/home/personal/banking/rates/mortgages" 
Do While Browser.Busy And Not Browser.ReadyState = READYSTATE_COMPLETE 
    DoEvents 
Loop 
Set Document = Browser.Document 
Set Elements = Document.getElementsByTagName("table")(0).getElementsByTagName("tr") 
Debug.Print Elements.Length 
For Each Element In Elements 
    Column = 1 
    'Dim Children As IHTMLElementCollection 
    'Dim Child As IHTMLElement 
    Set Children = Element.getElementsByTagName("td") 
    For Each Child In Children 
     ThisWorkbook.Worksheets("Sheet1").Cells(Row, Column).Value = Child.innerText 
     Column = Column + 1 
    Next Child 
    Row = Row + 1 
Next Element 
End Sub 
+0

+1不错的答案:) – Santosh

+0

@NickSlash - 我希望避免这种方法,但在这种情况下似乎是必要的。感谢您的反馈和代码。 – Roberto