2017-02-10 50 views
-2

我試圖從HTML頁中提取表。VBA - 解析HTML以檢索要excel的表

的HTML看起來像:

<table class='tableStyle'> 
<tr> 
<th class='headerValueClass'>Oper Day</th> 
<th class='headerValueClass'>Interval Ending</th> 
<th class='headerValueClass'>HB_BUSAVG</th> 
<th class='headerValueClass'>HB_HOUSTON</th> 
<th class='headerValueClass'>HB_HUBAVG</th> 
<th class='headerValueClass'>HB_NORTH</th> 
<th class='headerValueClass'>HB_SOUTH</th> 
<th class='headerValueClass'>HB_WEST</th> 
<th class='headerValueClass'>LZ_AEN</th> 
<th class='headerValueClass'>LZ_CPS</th> 
<th class='headerValueClass'>LZ_HOUSTON</th> 
<th class='headerValueClass'>LZ_LCRA</th> 
<th class='headerValueClass'>LZ_NORTH</th> 
<th class='headerValueClass'>LZ_RAYBN</th> 
<th class='headerValueClass'>LZ_SOUTH</th> 
<th class='headerValueClass'>LZ_WEST</th> 
</tr> 
<tr> 
    <td class='labelClassCenter'>02/10/2017</td> 
    <td class='labelClassCenter'>0015</td> 
    <td class='labelClassCenter'>14.76</td> 
    <td class='labelClassCenter'>16.71</td> 
    <td class='labelClassCenter'>11.72</td> 
    <td class='labelClassCenter'>18.32</td> 
    <td class='labelClassCenter'>14.34</td> 
    <td class='labelClassCenter'>-2.52</td> 
    <td class='labelClassCenter'>14.07</td> 
    <td class='labelClassCenter'>13.79</td> 
    <td class='labelClassCenter'>16.62</td> 
    <td class='labelClassCenter'>13.76</td> 
    <td class='labelClassCenter'>17.48</td> 
    <td class='labelClassCenter'>26.37</td> 
    <td class='labelClassCenter'>14.42</td> 
    <td class='labelClassCenter'>-1.07</td> 
</tr> 
<tr> 
    <td class='labelClassCenter'>02/10/2017</td> 
    <td class='labelClassCenter'>0030</td> 
    <td class='labelClassCenter'>13.02</td> 
    <td class='labelClassCenter'>14.99</td> 
    <td class='labelClassCenter'>10.54</td> 
    <td class='labelClassCenter'>15.71</td> 
    <td class='labelClassCenter'>13.49</td> 
    <td class='labelClassCenter'>-2.03</td> 
    <td class='labelClassCenter'>12.86</td> 
    <td class='labelClassCenter'>13.19</td> 
    <td class='labelClassCenter'>14.93</td> 
    <td class='labelClassCenter'>12.66</td> 
    <td class='labelClassCenter'>14.98</td> 
    <td class='labelClassCenter'>22.27</td> 
    <td class='labelClassCenter'>14.20</td> 
    <td class='labelClassCenter'>-1.29</td> 
</tr> 

我想從這個得到一個不錯的excel表格。

這是我的子頁面,但我不知道如何從這裏解析HTML。

Sub ImportRTPrice() 

READYSTATE_COMPLETE = 4 
Dim ie As InternetExplorer 
Dim html As MSHTML.HTMLDocument 
Set ie = New InternetExplorer 
ie.Visible = False 
ie.Navigate "http://ercot.com/content/cdr/html/20170210_real_time_spp" 
Do While ie.READYSTATE <> READYSTATE_COMPLETE 
DoEvents 
Loop 
Set html = ie.Document 
ActiveWorkbook.ActiveSheet.Range("A1") = html.DocumentElement.innerHTML 
Set ie = Nothing 

End Sub 

謝謝! 奧利維爾

+3

您需要研究如何使用'MSHTML'庫API來迭代DOM元素。我確信到處都有一些TON的例子。現在你的問題不是關於* specific *編程問題 - 你基本上是要求人們爲你做這個工作,而這對Stack Overflow來說太寬泛了。 –

回答

0

我希望這會讓你在路上。這是我認爲你正在尋找的東西。如果您有任何問題,請告訴我。我也建議尋找API調用,但這會讓你在你的方式這個你上面提供的代碼。

Sub ImportRTPrice() 

Dim ie As InternetExplorer 
Dim html As MSHTML.HTMLDocument 

Dim i 

Set ie = New InternetExplorer 

ie.Visible = False 
ie.Navigate "http://ercot.com/content/cdr/html/20170210_real_time_spp" 

Do While ie.READYSTATE <> READYSTATE_COMPLETE 
DoEvents 
Loop 

Set html = ie.Document 

On Error Resume Next 

For i = 1 To 100 ' may have to adjust 
ActiveWorkbook.ActiveSheet.Cells(i, 1) = html.getElementsByClassName("headerValueClass")(i).innerHTML 
ActiveWorkbook.ActiveSheet.Cells(i, 2) = html.getElementsByClassName("labelClassCenter")(i).innerHTML 
Next i 

On Error GoTo 0 

ie.quit 

Set ie = Nothing 

End Sub 

祝您有美好的一天!