Использование IE для экспорта содержимого веб-страницы в Excel - PullRequest
0 голосов
/ 16 февраля 2011

Мне нужно вытащить названия школ и сокращения из этой страницы в Википедии .

Сокращения будут идти в столбце A, а названия школ - в столбце B.

Я надеюсь использовать функцию в IE , но я не могу понять, можно ли экспортировать определенные аспекты страницы с экспортом всей страницы.

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

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

Если вы хотите использовать макрос VBA для этого, вот код, который вам понадобится.Вам нужно установить ссылку на «Microsoft XML, v6.0», затем создать и запустить этот макрос:

Option Explicit

Sub main()

Dim domResult As DOMDocument60
Dim ixnlLi As IXMLDOMNodeList
Dim iRow As Integer
Dim sResult As String
Dim iDashPos As Integer

Set domResult = New DOMDocument60
domResult.setProperty "ProhibitDTD", False
domResult.setProperty "SelectionNamespaces", "xmlns:ns='http://www.w3.org/1999/xhtml'"
domResult.resolveExternals = True
domResult.validateOnParse = False
domResult.async = False
domResult.Load "http://en.wikipedia.org/wiki/List_of_colloquial_names_for_universities_and_colleges_in_the_United_States"


Set ixnlLi = domResult.selectNodes("id('bodyContent')/ns:ul/ns:li")

With ThisWorkbook.Worksheets("Sheet1")
    .UsedRange.ClearContents
    For iRow = 1 To ixnlLi.Length
        sResult = ixnlLi(iRow - 1).Text
        iDashPos = InStr(sResult, "-")
        If (iDashPos > 0) Then
            .Cells(iRow, 1).Value = Trim$(Left$(sResult, (iDashPos - 1)))
            .Cells(iRow, 2).Value = Trim$(Mid$(sResult, (iDashPos + 1)))
        Else
            .Cells(iRow, 1).Value = sResult
            .Cells(iRow, 2).Value = ""
        End If
    Next iRow
    .UsedRange.Columns.AutoFit
End With

End Sub

Это будет довольно хрупкое решение, потому что если кто-то изменит структуру страницы, выражение XPathиспользуемый в selectNodes сломался бы.Вы можете использовать более простое и менее хрупкое выражение //ns:li в selectNodes, но при этом будут перенаправлены некоторые другие посторонние значения со страницы, которые вы должны будете удалить из своего списка.XHTML (из-за двух пустых пар тегов <ul></ul>)

0 голосов
/ 17 февраля 2011

Если это разовая вещь, вы должны быть в состоянии приблизиться к тому, что вам нужно.На новом листе, если вы выберете один из доступных вариантов

enter image description here

и следуйте инструкциям, импортирующим его на ваш лист в диапазоне A1, у вас будут посторонние строки, но вы можете скопироватьпросто A16: A380 на другой лист.В то время как диапазон выбран на этом новом рабочем листе, выберите «ДАННЫЕ»> «Текст в столбцы» и установите разделитель на «-» (знак минус), это даст вам в основном то, что вам нужно.Отсюда сортируем A: B на A и удаляем пустые и [править] строки заголовков, которые вам не нужны.

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

Этот пример - офис 2003, но та же идея может быть реализована и с другими версиями.

...