将图像URL和数据从网页表收集到Excel表

时间:2016-03-29 15:25:20

标签: excel vba excel-vba

需要从网页上的表中收集数据,某些表格单元格中有图像。   代码是将数据复制到Excel,如果单元格有图像,则获取其src链接而不是图像。下面是代码,但它不起作用,我不知道如何检测单元格中是否有图像,并将其src链接添加到Excel单元格。

Sub extractData()

Dim IE As Object, obj As Object
Dim myYear As String
Dim r As Integer, c As Integer, t As Integer
Dim elemCollection As Object



Set IE = CreateObject("InternetExplorer.Application")



myYear = InputBox("Enter year")

With IE

.Visible = True
.navigate ("url")


While IE.ReadyState <> 4
DoEvents
Wend


For Each obj In IE.Document.All.Item("Year").Options

If obj.innerText = myYear Then

obj.Selected = True

End If

Next obj



IE.Document.getElementsByName("btn_search").Item.Click

Do While IE.busy: DoEvents: Loop


ThisWorkbook.Sheets("Sheet1").Range("A1:K2000").ClearContents



Set elemCollection = IE.Document.getElementsByTagName("TABLE")



For t = 0 To (elemCollection.Length - 9)

For r = 0 To (elemCollection(t).Rows.Length - 1)
For c = 0 To (elemCollection(t).Rows(r).Cells.Length - 1)
If elemCollection(t).Rows(r).Cells(c).innerText = "" Then

ThisWorkbook.Worksheets(1).Cells(r + 1, c + 1) = elemCollection(t).Rows(r).Cells(c).getAttribute("src")
Exit For
End If
Next

ThisWorkbook.Worksheets(1).Cells(r + 1, c + 1) = elemCollection(t).Rows(r).Cells(c).innerText
Next c
Next r
Next t

End With


Set IE = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

首先,向上看HTML Document Object Model。有很多关于如何使用JavaScript来使用DOM的教程,而VBA是真正相似的(因为DOM不会根据语言而改变,VBA与VBScript非常密切相关,类似于JavaScript)。其次,如果出现错误但单击“调试”按钮时没有突出显示任何行,请使用F8键逐行执行代码。这将让您找出错误发生的位置。第三,添加对Microsoft HTML Object Library的引用,以便您可以使用Intellisense进行代码提示。

在没有看到HTML源代码的情况下提供实际解决方案很难,所以我会给出一些指示:

使用IE.Document.Body.getElementsByTagName("TABLE")(注意添加BODY以缩小范围)以获取页面上每个表的集合。通过引用HTML Objects Lib,您可以执行以下操作:

Dim oTable As HTMLTable
Dim oCell As HTMLTableCell
Dim oImg As HTMLImage
Dim strSrc As String
For Each oCell In oTable.Cells
    strSrc = ""
    On Error Resume Next
    Set oImg = oCell.getElementsByTagName("img")
    strSrc = oImg.Source
    On Error GoTo 0
    If strSrc <> "" Then Debug.Print strSrc
Next

这应该(我没有测试)循环遍历表中的每个单元格并尝试获取img元素。如果它失败了,没有大问题,只需继续下一个单元格即可。如果要在使用后使用后期绑定,请删除HTML Obj Lib引用,然后将所有内容作为对象进行调暗。例如:

Dim oTable As Object 'HTMLTable
Dim oCell As Object 'HTMLTableCell
Dim oImg As Object 'HTMLImage
Dim strSrc As String