VBA将html导入表的结果拆分为excel

时间:2013-06-13 19:05:37

标签: excel excel-vba web-scraping vba

您好我正在从网站导入整个表格到excel字符串:

Dim fST As String
fST = Doc.getElementsByTagName("table")(0).innerText

之后我想在excel单元格中拆分表格,并使用html表格中的<td>标签进行拆分,或者至少这是我认为可以做到的选项,所以导入的表一旦导入,将在excel内部相同,每个值都将在单个单元格内。

让我知道谢谢。

这是我正在使用的整个conde:

Private Sub Worksheet_Change(ByVal Target As Range)

 If Target.Row = Range("URL").Row And _
 Target.Column = Range("URL").Column Then
    Dim IE As New InternetExplorer
    IE.Visible = True
    IE.navigate Application.ActiveSheet.Range("URL")
    Do
        DoEvents
        Loop Until IE.readyState = READYSTATE_COMPLETE
    Dim Doc As HTMLDocument
    Set Doc = IE.document

    Dim tbl, trs, tr, tds, td, r, c

    Set tbl = Doc.getElementsByTagName("table")(0)
    Set trs = tbl.getElementsByTagName("tr")

    For r = 1 To trs.Count
        Set tds = trs(r).getElementsByTagName("td")
        For c = 1 To tds.Count
            ActiveSheet.Cells(r, c).Value = tds(c).innerText
        Next c
    Next r
    IE.Quit
 End If
End Sub

但它说错误:对象不支持以下行中的此属性或方法:对于r = 1 To trs.Count

2 个答案:

答案 0 :(得分:6)

编辑:测试示例

Sub Tester()

Dim IE As Object
Dim tbls, tbl, trs, tr, tds, td, r, c

Set IE = CreateObject("internetexplorer.application")

IE.navigate "http://www.w3schools.com/html/html_tables.asp"

Application.Wait Now + TimeSerial(0, 0, 4)

    Set tbls = IE.Document.getElementsByTagName("table")
    For r = 0 To tbls.Length - 1
        Debug.Print r, tbls(r).Rows.Length 
    Next r

    Set tbl = IE.Document.getElementsByTagName("table")(5)
    Set trs = tbl.getElementsByTagName("tr")

    For r = 0 To trs.Length - 1
        Set tds = trs(r).getElementsByTagName("td")
        'if no <td> then look for <th>
        If tds.Length = 0 Then Set tds = trs(r).getElementsByTagName("th")

        For c = 0 To tds.Length - 1
            ActiveSheet.Range("B4").Offset(r, c).Value = tds(c).innerText
        Next c
    Next r

End Sub

答案 1 :(得分:2)

我也在寻找这个问题的答案。我终于通过与同事交谈找到了解决方案,这实际上是通过录制宏来实现的。

我知道,你们都认为自己超越了这一点,但这实际上是最好的方式。请在此处查看完整帖子:http://automatic-office.com/?p=344简而言之,您希望录制宏并转到数据 - &gt;从网站导航到您的网站,然后选择您想要的表格。告诉我们将哪个细胞放入其中就可以了!

我过去曾使用上面的解决方案“get element by id”类型的东西,这对于一些元素来说很棒,但是如果你想要一个完整的表,并且你没有超级经验,只需记录一个宏。不要告诉你的朋友,然后重新格式化它看起来像你自己的工作,所以没有人知道你使用宏工具;)