Я новичок и пытаюсь создать простой веб-шаблон из HTML-таблицы, чтобы преуспеть и борюсь с определенным дизайном веб-сайтов. Насколько я понимаю, большинство таблиц организованы с такими тегами: (table -> tr -> td) как in, table, row, затем cell.
Я могу справиться с этим достаточно просто, но у «основной таблицы», из которой я пытаюсь извлечь, есть таблицы и строки, содержащиеся в ячейке, например («главная таблица -> строка -> ячейка -> вложенная таблица -» > sub-row -> sub-cell). Для жизни я не могу получить чистый лист Excel
Вот как выглядит HTML:
подробный HTML
обзор HTML
Что мне нужно сделать, это извлечь только NCI
и $392,764
. Но пока я извлекаю дубликаты этих значений с помощью команды .innertext
. Я надеюсь, что кто-то может помочь мне написать простой макрос, который получает только элемент lastchild
из каждой родительской ячейки ... Спасибо!
Вот что у меня так далеко ...
Вот в чем проблема:
Sub processhtmlpage(htmlpage As mshtml.HTMLDocument)
Dim htmlTable As mshtml.IHTMLElement
Dim htmlTables As mshtml.IHTMLElementCollection
Dim HTMLRow As mshtml.IHTMLElement
Dim htmlrows As mshtml.IHTMLElementCollection
Dim htmlcell As mshtml.IHTMLElement
Dim rownum As Long, colnum As Integer
Set htmlTables = htmlpage.getElementsByTagName("table")
Set HTMLInnerTables = htmlpage.getElementsByTagName("table")
Set HTMLInnerRows = htmlpage.getElementsByTagName("tr")
For Each htmlTable In htmlTables
Worksheets.Add
Range("a1").Value = htmlTable.className
Range("b1").Value = Now
rownum = 2
For Each HTMLRow In htmlTable.getElementsByTagName("tr")
colnum = 1
For Each htmlcell In HTMLRow.getElementsByTagName("td")
Cells(rownum, colnum) = htmlcell.innerText
colnum = colnum + 1
Next htmlcell
rownum = rownum + 1
Next HTMLRow
Next htmlTable
End Sub
Я предпринял несколько безумных попыток обойти это, используя команды if ... then, но через несколько часов я просто потерян. Должен быть лучший способ. Пожалуйста помоги!!! В случае, если это полезно, вот группа ****, с которой я закончил:
Sub processhtmlpage(htmlpage As mshtml.HTMLDocument)
Dim htmlTable As mshtml.IHTMLElement
Dim htmlTables As mshtml.IHTMLElementCollection
Dim HTMLRow As mshtml.IHTMLElement
Dim htmlrows As mshtml.IHTMLElementCollection
Dim htmlcell As mshtml.IHTMLElement
Dim rownum As Long, colnum As Integer
Dim HTMLInnerTables As mshtml.IHTMLElementCollection
Dim HTMLInnerTable As mshtml.IHTMLElement
Dim HTMLInnerRow As mshtml.IHTMLElement
Dim HTMLInnerows As mshtml.IHTMLElementCollection
Dim innerhtmlcell As mshtml.IHTMLElement
Set htmlTables = htmlpage.getElementsByTagName("table")
Set HTMLInnerTables = htmlpage.getElementsByTagName("table")
Set HTMLInnerRows = htmlpage.getElementsByTagName("tr")
For Each htmlTable In htmlTables
If htmlTable.getAttribute("id") <> "main-table" Then
GoTo line4
End If
Worksheets.Add
Range("a1").Value = htmlTable.className
Range("b1").Value = Now
rownum = 2
For Each HTMLRow In htmlTable.getElementsByTagName("tr")
If HTMLRow.getAttribute("bgcolor") = "#ffffff" Or HTMLRow.getAttribute("class") = "lop" Then
GoTo line6
End If
colnum = 1
For Each htmlcell In HTMLRow.getElementsByTagName("td") [line 6]
If htmlcell.getAttribute("nowrap") = "nowrap" Then
GoTo line1
Else
If htmlcell.getAttribute("colspan") = 2 Then
Cells(rownum, colnum) = htmlcell.innerText
rownum = rownum + 1
Call stupidcell
Else
End If
For Each HTMLInnerTable In htmlcell.getElementsByTagName("table")
If HTMLInnerTable.getAttribute("id") <> "main-table" Then
GoTo line1
End If
Next HTMLInnerTable
For Each HTMLInnerRow In htmlcell.getElementsByTagName("tr")
If HTMLInnerRow.getAttribute("bgcolor") = "#ffffff" Then
GoTo line1
End If
Next HTMLInnerRow [line5]
Next HTMLInnerTable
Cells(rownum, colnum) = htmlcell.innerText [line2]
colnum = colnum + 1
Next htmlcell [line1]
rownum = rownum + 1
Next HTMLRow [line3]
Next htmlTable [line4]
End Sub