2013-12-16 89 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