Condividi:        

Excel - WebQuery con Login

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

Excel - WebQuery con Login

Postdi marcoaddario » 07/07/14 00:22

Salve a tutti ragazzi sono un nuovo utente.

Da giorni ho un grosso problema che solo grazie al vostro aiuto posso risolvere:

Devo caricare una graduatoria aggiornabile su Excel.
La graduatoria è di 368 pagine ciascuna delle quali contiene 100 righe.
Inoltre si può accedere ad essa solo tramite username e password.

Ho provato con la query web e con varie macro che ho cercato in questo sito, ma per mia ignoranza non riesco.

La prima pagine della graduatoria è questa:

https://accessoprogrammato.cineca.it/2014/studenti/graduatoria.php?&statica=1&user=STU18MP40702

La seconda:

https://accessoprogrammato.cineca.it/2014/studenti/graduatoria.php?&statica=1&pagina=2&user=STU18MP40702

E così via fino alla pagine numero 368.

Grazie mille e complimenti per il sito :)
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Sponsor
 

Re: Excel - WebQuery con Login

Postdi marcoaddario » 07/07/14 22:15

Nessuno mi puo aiutare? :(
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Re: Excel - WebQuery con Login

Postdi Anthony47 » 08/07/14 11:19

Senza sapere il formato dei dati non posso che sparare a caso...
Con questa premessa:
A) Apri InternetExplorer ed esegui il login al sito
B) inserisci su un foglio una web query che estragga i dati della prima pagina che ti interessano e li posizioni da A3 verso il basso. Per questo userai il tuo link della prima pagina; poiche' sei loggato dovresti importare regolarmente i dati della prima pagina

C) Avendo attivo il foglio che contiene la web query, esegui questa macro:
Codice: Seleziona tutto
Sub longlist()
Dim I As Long, nConn As String
'
Cells.ClearContents
For I = 1 To 368
    Cells(Rows.Count, 1).End(xlUp).Offset(2, 0).Select
    With Range("A2").QueryTable
        nConn = "URL;https://accessoprogrammato.cineca.it/2014/studenti/graduatoria.php?&statica=1&pagina=" & I & "&user=STU18MP40702" & _
           ", Destination =Range(" & Selection.Address & ")"
        .Connection = nConn
        .Refresh BackgroundQuery:=False
    End With
DoEvents
Next I
End Sub

Non escludo che ti possa importare quello che cerchi, dandogli il tempo che gli serve.

Ricorda: quando esegui la macro devi avere una sessione InternetExplorer attiva, in cui risulti loggato al sito.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - WebQuery con Login

Postdi marcoaddario » 08/07/14 18:29

Grazie per la risposta Anthony.

Ho seguito passo passo i tuoi consigli:
Sono entrato con i miei dati su Internet Explorer in modo tale da risultare connesso sulla query.
Ho caricato la query della mia prima pagina posizionando il tutto a partire da A3.

Ma una volta eseguita la macro mi esce il seguente errore:

Errore di run-time '1004':
Errore definito dall'applicazione o dall'oggetto.

Clicco quindi su debug e mi evidenzia "With Range("A2").QueryTable"
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Re: Excel - WebQuery con Login

Postdi Anthony47 » 08/07/14 18:41

Grrrr...
Errata With Range("A2").QueryTable corrige With Range("A3").QueryTable
(Inizialmente avevo inserito la query a partire da A2, poi ho modificato in A3 ma ho lasciato il codice precedente)

Ciao!
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - WebQuery con Login

Postdi marcoaddario » 08/07/14 20:48

Niente da fare ancora..

Ho modificato il piccolo errore (A3) e carico la prima pagine sempre da A3, ma questa volta, eseguita la macro è uscito:

Errore di run-time '1004':
La query web non ha restituito dati. Per modificare la query, scegliere OK, fare clic sulla freccia nella casella del nome sulla barra della formula, fare clic sul nome dell'intervallo di dati esterno per la query Web, quindi fare clic con il pulsante destro del mouse sulla selezione e scegliere Modifica query.

Cliccato debug, mi viene evidenziato: .Refresh BackgroundQuery:=False

Ho provato a cambiare il valore in True, ma niente da fare :(
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Re: Excel - WebQuery con Login

Postdi Anthony47 » 09/07/14 01:45

Senza sapere il formato dei dati non posso che sparare a caso...

Sparo ancora la seconda cartuccia, sempre a caso:
Codice: Seleziona tutto
    With Range("A3").QueryTable
    If I > 1 Then pippo = "&pagina=" & I Else pippo = ""
        nConn = "URL;https://accessoprogrammato.cineca.it/2014/studenti/graduatoria.php?&statica=1" & pippo & "&user=STU18MP40702" & _
           ", Destination =Range(" & Selection.Address & ")"
        .Connection = nConn
        .Refresh BackgroundQuery:=False
    End With

Va a sostituire l' equivalente codice DA With Range("A3").QueryTable A End With

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - WebQuery con Login

Postdi marcoaddario » 09/07/14 12:52

Niente da fare, ho inserito la macro :
Codice: Seleziona tutto
    Sub longlist()
    Dim I As Long, nConn As String
    '
    Cells.ClearContents
    For I = 1 To 368
        Cells(Rows.Count, 1).End(xlUp).Offset(2, 0).Select
        With Range("A3").QueryTable
        If I > 1 Then pippo = "&pagina=" & I Else pippo = ""
            nConn = "URL;https://accessoprogrammato.cineca.it/2014/studenti/graduatoria.php?&statica=1" & pippo & "&user=STU18MP40702" & _
               ", Destination =Range(" & Selection.Address & ")"
            .Connection = nConn
            .Refresh BackgroundQuery:=False
        End With
    DoEvents
    Next I
    End Sub


Ma ancora una volta mi da:

Errore di run-time '1004':
La query web non ha restituito dati. Per modificare la query, scegliere OK, fare clic sulla freccia nella casella del nome sulla barra della formula, fare clic sul nome dell'intervallo di dati esterno per la query Web, quindi fare clic con il pulsante destro del mouse sulla selezione e scegliere Modifica query.

Cliccato debug, mi viene evidenziato: .Refresh BackgroundQuery:=False

Per quanto riguarda il formato dei dati,essendo ignorante in materia posso dirti che è lo stesso di questo topic http://www.pc-facile.com/forum/viewtopic.php?t=100356#p579487
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Re: Excel - WebQuery con Login

Postdi Anthony47 » 09/07/14 14:37

Non avendo l' accesso al sito non so dire nulla di piu' preciso; dovresti debuggare tu la situazione quando si presenta (alla prima pagina? alla seconda? all' ultima?) per determinare il motivo per cui la query non restituisce dati.
Lo puoi fare selezionando A3, poi tasto dx, scegli Modifica query; potrai vedere l' url usato nella connessione e quali dati sono restituiti, potendo fare cosi' una diagnosi dell' errore.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - WebQuery con Login

Postdi marcoaddario » 09/07/14 15:04

Ah ecco;

Una volta avviata la macro e comparso l'errore, sono andato su A3, modifica query, e mi è uscita la pagina del login, con su scritto accesso negato. Tutto ciò è successo nonostante abbia effettuato il login su Internet Explorer ( e tenuta aperta anche quando eseguivo la macro). Infatti ho esportato tranquillamente i dati della prima pagina con la Query web.

Appena eseguo la macro perdo il login.
Se mi contatti in privato posso girarti i dati accesso. E' davvero importante
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Re: Excel - WebQuery con Login

Postdi marcoaddario » 10/07/14 10:44

Anthony ti sto scrivendo in privato ma i messaggi vanno in uscita :/
Prova ad accedere da qui Prova il login da qui:
Prova il login da qui:
https://accessoprogrammato.cineca.it/2014/studenti/ME_LC.html

Quelli dell username sono due Zero, e la password va scritta in maiuscolo
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Re: Excel - WebQuery con Login

Postdi marcoaddario » 10/07/14 14:38

Penso di aver trovato l'errore, infatti una volta che faccio modifica query mi riporta sul seguente sito:
"https://accessoprogrammato.cineca.it/2014/studenti/graduatoria.php?&statica=1&pagina=1&user=STU18MP40702, Destination =Range($A$3) "

Per sbaglio penso avrai inserito anche , Destination =Range($A$3) nell'url della macro
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11

Re: Excel - WebQuery con Login

Postdi Anthony47 » 11/07/14 01:04

Basta, non voglio piu' sentir parlare di query web
Visto il comportamento instabile al massimo ho riciclato la macro suggerita tempo fa ad altro utente per leggere le tabelle da pagine web (vedi viewtopic.php?t=100441#p581076), inserendola in un ciclo per leggere le N pagine una dopo l' altra.
Il codice e' questo:
Codice: Seleziona tutto
Sub Macro2()
'
Set IE = CreateObject("InternetExplorer.Application")
'
myUrlRoot = "https://accessoprogrammato.cineca.it/2014/studenti/graduatoria.php?&statica=1&pagina=" ' 2&user=STU18MP40702"
'
'Leggi le tabelle su FoglioXX
'Sheets("FOGLIO3").Select                      <<< Vedi testo; sceglie il Foglio
'Cells.ClearContents                           '<<< Vedi testo; azzera foglio (1, alternativo a 2)
I = Cells(Rows.Count, 1).End(xlUp).Row + 1    '<<< Vedi testo; continua elenco (2, alternativo a 1)

For II = 1 To 10
    myUrl = myUrlRoot & II & "&user=STU18MP40702"
       
    With IE
        .navigate myUrl
        .Visible = True
        Do While .Busy: DoEvents: Loop    'Attesa not busy
        Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
    End With
    '
    myStart = Timer  'attesa addizionale
    Do
        DoEvents
        If Timer > myStart + 0.5 Or Timer < myStart Then Exit Do
    Loop
   
If II = 1 Then Stop               'Per eseguire eventuale login
   
    Set myColl = IE.document.getElementsByTagName("TABLE")
    For Each myItm In myColl
        For Each trtr In myItm.Rows
            For Each tdtd In trtr.Cells
                Cells(I + 1, J + 1) = tdtd.innertext
'                Cells(I + 1, 1).Select
                J = J + 1
            Next tdtd
            I = I + 1: J = 0
        Next trtr
    I = I + 1
    Next myItm
    Cells(I + 1, 1).Select
Next II
'
IEQuit:
'Chiusura IE
IE.Quit
Set IE = Nothing
End Sub
Elimina il codice precedente e sostituiscilo con questo.
Poi lancia la macro cosi' come e'.

La macro apre una sessione InternetExplorer, prova a leggere la prima pagina e si ferma.
Se l' accesso fallisce perche' e' necessario loggarsi, loggati al sito dalla pagina del login e poi vai manualmente alla prima pagina di dati (io ho incollato l' url che hai dato tu). Con pagina 1 visualizzata, torna sull' editor della macro e premi il tasto F5 (continua); a questo punto le altre pagine (10, per effetto di quel For II = 1 To 10) dovrebbero essere lette in sequenza e il contenuto accodato sul foglio di lavoro.
Se rilanci la macro, essa si ferma di nuovo all' inizio, ma probabilmente non c' e' bisogno di rieseguire il login (la pagina 1 viene visualizzata correttamente) e bastera' premere F5 per continuare.

Se funziona probabilmente vorrai leggere tutte le 368 pagine; per questo ti bastera' modificare il ciclo in For II = 1 To 370, lanciare la macro e dare tempo al tempo...

Il foglio su cui si lavora VIENE AZZERATO ALL' INIZIO SENZA PREAVVISO; ci sono, verso l' inizio del codice, alcune istruzioni marcate <<< che consentono di scegliere quale foglio utilizzare (al momento si usa il foglio "corrente"), se azzerare il foglio o se invece continuare un elenco gia' importato.

Buon collaudo...

PS: ho ricevuto i tuoi numerosi messaggi.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - WebQuery con Login

Postdi marcoaddario » 12/07/14 00:03

grazie mille. Perdona i tanti messaggi, mi risultavano e risultano in uscita
marcoaddario
Newbie
 
Post: 9
Iscritto il: 07/07/14 00:11


Torna a Applicazioni Office Windows


Topic correlati a "Excel - WebQuery con Login":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti