Импорт таблиц HTML в Excel с VBA - PullRequest
0 голосов
/ 05 июня 2019

У меня есть этот код, который я нашел в Интернете, который извлекает таблицы HTML со страницы и выводит их на рабочий лист.У меня не было проблем, пока я не наткнулся на текущую страницу, которую мне нужно импортировать.У него есть несколько таблиц

Я пытался проверить его на наличие другого имени класса, чтобы увидеть, что извлекается, но он всегда неправильно захватывает эти первые элементы.Я знаю, что это, мне просто не хватает знаний для настройки.

Sub getVTAdata()
    ' Declare all of our variables
    Dim ie As Object
    Dim btn As Object
    Dim tRows As Object
    Dim temp As Object
    Dim Table As Object
    Dim tHead As Object
    Dim tCells As Object
    Dim np As Variant
    Dim numPages As String
    Dim pos As Integer
    Dim rNum As Integer
    Dim cNum As Integer
    Dim h
    Dim r
    Dim c
    Dim url As String


    ThisWorkbook.Worksheets("UpdateTemp").Select

    url = "https://www.canada.ca/en/treasury-board-secretariat/services/terms-conditions-employment/isolated-posts-government-housing/vacation-travel-assistance-april-2019.html"

    ' Create Internet Explorer object
    Set ie = CreateObject("InternetExplorer.Application")

    ' Make it invisible
    ie.Visible = False

    ' Navigate to the webpage
    ie.navigate url

    ' Wait while the page is loading
    While ie.Busy
    DoEvents
    Wend

    ' Wait an additional 3 seconds for good measure
    Application.Wait DateAdd("s", 3, Now)

    ' Create variables to track the row and column to output the
    ' text on our spreadsheet
    rNum = 1
    cNum = 1

    ' Looking at the source code we see that the table we want to
    ' scrape data from is in class called "page-content new-list-styles"
    ' so we can use the getelementsbyclass name method to get that
    Set Table = ie.document.getelementsbyclassname("mwsgeneric-base-html parbase section")

    ' Again, Table is now a collection, so to refer to the first
    ' item in the collection, we use (0) We want to pull each row in
    ' that section, so we can use the getelementsbytagname method
    ' and use the table row tag of "tr"
    Set tRows = Table(0).getelementsbytagname("tr")

    ' First we can get the column headings which use the "th" tag
    Set tHead = Table(0).getelementsbytagname("th")

    ' Loop through each column heading
    For Each h In tHead

    ' Output the contents of the cell to the spreadsheet
    Worksheets("UpdateTemp").Cells(rNum, cNum).Value = h.innertext

    ' Increase the cNum value so the next time around the data will
    ' output to the column to the right
    cNum = cNum + 1
    Next
    ' Move on to the next row before pulling the data and reset the
    ' column back to 1
    rNum = rNum + 1
    cNum = 1

    ' Loop through each row in the table
    For Each r In tRows
    ' Within each row, pull each cell by using the
    ' getelementsbytagname method and use the table tag "td"
    Set tCells = r.getelementsbytagname("td")

    ' Loop through each cell of the row
    For Each c In tCells
    ' Output the contents of the cell to the spreadsheet
    Worksheets("UpdateTemp").Cells(rNum, cNum).Value = c.innertext

    ' Increase the cNum value so the next time around the data will
    ' output to the column to the right
    cNum = cNum + 1
    Next

    ' When we switch to the next row of the table, increase the rNum
    ' value so we go to the next row of our spreadsheet, and also
    ' reset back to column number 1
    rNum = rNum + 1
    cNum = 1
    Next

    ' Wait while the page updates
    While ie.Busy
    DoEvents
    Wend

    ' Quit the internet explorer application
    ie.Quit

    ' Clear the ie object. This probably isn't necessary, but helps
    ' clean things up
    Set ie = Nothing

End Sub

Это тянет таблицы, но происходит то, что они использовали тег на первом элементе в каждой строке, поэтому он добавляет всетеги в строке 1 вместо первого столбца.

Заголовки |Строка 1, столбец 1 |Строка 2, столбец 1 |Строка 3, столбец 1
Строка 1, столбец 2
Строка 2, столбец 2
Строка 3, столбец 2
Строка 4, столбец 2

Что должно произойти, это всестроки совпадают с каждым названием местоположения.

Заголовки
Строка 1, столбец 1 |Строка 1, столбец 2
строка 2, столбец 1 |Строка 2, Колонка 2
Строка 3, Колонка 1 |Строка 3, Колонка 2
Строка 4, Колонка 1 |Ряд 4, Столбец 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...