Чтение веб-страниц с использованием Excel VBA - PullRequest
3 голосов
/ 12 сентября 2011

Я хочу читать веб-страницы, используя Excel VBA.Как мне выполнить эту задачу?Это вообще возможно?

Ответы [ 2 ]

9 голосов
/ 14 сентября 2011

Исходя из Excel 2003, да, это возможно - вы можете использовать объекты SHDocVw.InternetExplorer и MSHTML.HTMLDocument для вызова веб-страницы, получения контроля над объектом DOM и взаимодействия с ним.После создания ссылок на библиотеку объектов Microsoft HTML (... \ system32 \ MSHTML.TLB) и Microsoft Internet Control (... \ system32 \ ieframe.dll) вы можете поиграть со следующим примером:

Sub Test()
Dim Browser As SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument

    Set Browser = New SHDocVw.InternetExplorer                     ' create a browser
    Browser.Visible = True                                         ' make it visible
    Application.StatusBar = ".... opening page"
    Browser.navigate "http://www.google.com"                       ' navigate to page
    WaitForBrowser Browser, 10                                     ' wait for completion or timeout

    Application.StatusBar = "gaining control over DOM object"
    Set HTMLDoc = Browser.document                                 ' load the DOM object
    WaitForBrowser Browser, 10

    ' at this point you can start working with the DOM object. Usefull functions are
    ' With HTMLDoc
    '     .getElementByID(string)
    '     .getElementsByTagName(string)
    '     .getElementsByName(string)
    '     .getAttribute(string)
    '     .setAttribute string, string     .... to change field values, click a button etc.
    ' End With

    Application.StatusBar = ""                                      ' time to clean up
    Browser.Quit
    Set HTMLDoc = Nothing
    Set Browser = Nothing
End Sub

Sub WaitForBrowser(Browser As SHDocVw.InternetExplorer, Optional TimeOut As Single = 10)
Dim MyTime As Single

    MyTime = Timer
    Do While Browser.Busy Or (Timer <= MyTime + TimeOut)
        DoEvents
    Loop

    ' if browser still busy after timeout, give up
    If Browser.Busy Then
        MsgBox "I waited for " & Timer - MyTime & " seconds, but browser still busy" & vbCrLf & _
               "I give up now!"
        End
    End If
End Sub
4 голосов
/ 13 сентября 2011

Вы можете использовать VBA для автоматизации IE (множество примеров через Google) или вы можете получить страницу напрямую, используя экземпляр MSHTTP (то же самое можно найти и в Интернете). Что лучше для ваших нужд, будет зависеть от того, что именно вы хотите сделать. Трудно сказать больше без более подробных требований.

...