Condividi:        

Importare dati dal web

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Importare dati dal web

Postdi assixyz » 03/12/10 14:50

Ciao a tutti,
tramite questa macro scarico l'html di una pagina web che contiene i dati statistici che mi interessano:

Codice: Seleziona tutto
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function GetTempFileName Lib "Kernel32" Alias _
    "GetTempFileNameA" (ByVal lpszPath As String, _
    ByVal lpPrefixString As String, ByVal wUnique As Long, _
    ByVal lpTempFileName As String) As Long
Private Declare Function GetTempPath Lib "Kernel32" Alias "GetTempPathA" (ByVal _
    nBufferLength As Long, ByVal lpBuffer As String) As Long

' Creates a temporary (0 byte) file in the \TEMP directory
' and returns its name

Public Function GetTempFile(Optional Prefix As String) As String
    Dim TempFile As String
    Dim TempPath As String
    Const MAX_PATH = 260
   
    ' get the path of the \TEMP directory
    TempPath = Space$(MAX_PATH)
    GetTempPath Len(TempPath), TempPath
    ' trim off characters in excess
    TempPath = Left$(TempPath, InStr(TempPath & vbNullChar, vbNullChar) - 1)
   
    ' get the name of a temporary file in that path, with a given prefix
    TempFile = Space$(MAX_PATH)
    GetTempFileName TempPath, Prefix, 0, TempFile
    GetTempFile = Left$(TempFile, InStr(TempFile & vbNullChar, vbNullChar) - 1)

End Function

Public Sub DownloadURL(ByVal URL As String, ByVal DestinationFile As String)
    Dim ret As Long
    ret = URLDownloadToFile(0, URL, DestinationFile, 0, 0)
    If ret <> 0 Then
        Err.Raise ret, "DownloadURL", "Impossibile scaricare l'URL """ & URL & """ in """ & DestinationFile & """." & vbCrLf & "Codice di errore di URLDownloadToFile: " & LTrim(CStr(ret)) & "."
    End If
End Sub

Public Sub TuaMacro()
    'Cells(4, 4).SetFocus
   
    Dim dDd
    dDd = Cells(1, 2).Value '"http://www.targatona.it/index.asp"
    ' ovviamente è un indirizzo di prova
    MsgBox dDd
    Dim tempFileName As String, fileId As Integer
    tempFileName = GetTempFile()
    DownloadURL dDd, tempFileName
    fileId = FreeFile()
    Open tempFileName For Binary As fileId
    'ActiveCell.Value =  Input$(LOF(fileId), fileId)
     Cells(4, 4).Value = Input$(LOF(fileId), fileId)

    Close fileId
    Kill tempFileName
End Sub



Problema 1: La cella ha una limitazione di circa 32000 caratteri e l'thml della mia pagina ne ha oltre 64000 quindi viene tagliato e non posso utilizzare tutte le info che mi servo. Come posso risolvere questo inconveniente?

Problema 2: Visto che voi siete dei mostri in programmazione... gradirei consigli per raggiungere il mio obiettivo che è questo: scaricare i dati da una pagina web in una cella di excel, magari riuscissi ad incollare direttamente il testo e non l'html della pagina...

grazie a tutti!
ciao
Luciano
assixyz
Newbie
 
Post: 1
Iscritto il: 03/12/10 14:33

Sponsor
 

Re: Importare dati dal web

Postdi Flash30005 » 03/12/10 22:28

Ciao Assixyz e benvenuto nel Forum

ma si può sapere l'indirizzo della pagina della quale vorresti scaricare i dati?

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Importare dati dal web

Postdi Anthony47 » 04/12/10 01:55

Benvenuto anche da parte mia.
Se guardi questa discussione c' e' un caso e un problema simile al tuo: viewtopic.php?f=26&t=87115
Invece di caricare direttamente nella cella la soluzione era stata caricare in una variabile, poi spacchettare in piu' celle il contenuto della variabile.

Tieni presente che per scaricare l' html e' stata usata la proprieta' InnerHtml (vedi l' istruzione Range("K1").Value = objIE.document.body.innerHTML); ma se usi .InnerText scaricherai direttamente il testo, che sara' piu' corto dell' html.

Ma forse dovresti provare a fare una QueryWeb, per portare in un foglio excel il contenuto della pagina html, in modo strutturato.

Fai sapere dove arrivi con questi spunti; e comunque sapere quale e' la tua pagina (URL) di riferimento ci aiuterebbe a ragionare al meglio.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Importare dati dal web":


Chi c’è in linea

Visitano il forum: Nessuno e 122 ospiti