Condividi:        

Query dinamica 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

Query dinamica web

Postdi Gollum999 » 13/11/09 22:52

Gent.mo PC Facile.

Mi piacerebbe creare una Query dinamica web per importare i dati dal web appena cambiano.
Questo perchè ho bisogno di dati che si aggiornino in meno di 1 min.
So che questa funzione a che vedere con la finestra immettere valore parametro.
Il punto è che non riesco ad aprire quella finestra!

Se per favore mi potete dare una mano.

P.S. sono un neofita e so appena fare una normale query web...

Grazie a tutti.

Riccardo.
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Sponsor
 

Re: Query dinamica web

Postdi Anthony47 » 14/11/09 03:23

Mentre imposti una query web hai la possibilita' di settare l' opzione "aggiorna ogni ... minuti" (trovi questa scelta attivando, dalla finestrella "Imposta dati", il tasto Proprieta'); oppure, se la query e' gia' impostata sul tuo foglio, selezioni una cella di quelle compilate dalla query, tasto dx, scegli "Proprieta' intervallo dati" e spunti la voce impostando il periodo di aggiornamento.
Ovviamente con questa tecnica rileggi i dati ogni X tempo, non "quando essi cambiano"; per questo dovrai avere accesso a un "servizio dde": se parli di dati finanziari ci sono vari operatori specializzati nel fornire sia le informazioni che la piattaforma di trading, dovresti valutare con chi sottoscrivere un abbonamento.

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

Re: Query dinamica web

Postdi Flash30005 » 14/11/09 03:48

Registra una macro mentre crei una Query Web
Munu > Dati > Importa dati esterni > Nuova Query Web
e segui la procedura guidata impostando le opzioni e proprietà della query web
una volta terminata la procedura
fermi la macro
e nel codice vba troverai qualcosa tipo questo:
(Per accedere al VBa di Excel premi i Tasti ALT + F11)
Codice: Seleziona tutto
Sub ProvaQ()
With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.INDIRIZZO DELLA TUA PAGINA WEB", Destination:= _
        Range("A1"))
        .Name = "temporeale20"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With

Ens Sub


Ora inserirai un timer alla fine della query e un ritorno all'inizio del codice in questa maniera
Codice: Seleziona tutto
Sub ProvaQ()
'Inserisci queste due righe
Dim PauseTime, Start                              '<<<1
inizio:                                                     '<<< 2
'-------------------------------
'Tua Query registrata precedentemente
  With ActiveSheet.QueryTables.Add(Connection:= _
         "URL;http://www.INDIRIZZO DELLA TUA PAGINA WEB", Destination:= _
        Range("A1"))
....
....
...
        .Refresh BackgroundQuery:=False
    End With

'----------------------------------------- Copia e inserisci queste righe prima dell'End Sub
    PauseTime = 10                          ' <<<<<<<<<<<<<<   Imposta la durata di aggiornamento (in secondi)
    Start = Timer   
    Do While Timer < Start + PauseTime
        DoEvents        ' Passa il controllo ad altri processi.
    Loop
    GoTo inizio
'------------------------------------------- Fine inserimento
End Sub


Il loop continuo si attiverà all'avvio della macro fino alla chiusura del foglio,
eventualmente si può inserire un timer iniziale di n ore che fermerà il loop creato.

Fai sapere
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: Query dinamica web

Postdi TheClash » 26/11/09 14:43

Ciao a tutti,
ho seguito con molto interesse la discussione ed avendo un problema molto simile a quello di Gollum999 spero di non creare problemi se mi inserisco per porre dei piccoli quesiti.

Sto cercando di estrarre dei dati riguardanti le statistiche della mia connessione internet dalla pagina di stato del router
in una cartella di lavoro excel, ovviamente aggiornando i dati senza però sovrascriverli ai precedenti, in particolare mi
piacerebbe poterli accodare all'interno dello stesso foglio.

Grazie alla macro postata da Flash sono riuscito ad accodare i dati per colonne, ne deriva nel mio caso una lettura piuttosto scomoda, preferirei dunque se possibile aggiungere i nuovi dati in righe successive (andrebbe benissimo anche se fossero i dati più vecchi a scalare su righe successive ed i nuovi a rimanere ad inizio foglio).

In alternativa sono riuscito a far avvenire ogni rilevazione su un nuovo foglio di lavoro ma in questo modo ho delle difficoltà a reperire i dati ad un orario specifico a meno di non andare a tentativi fino a trovare il foglio che mi interessa.

Inoltre, in entrambi i casi, non saprei come fare a visualizzare in una cella della tabella l'orario in cui è avvenuta la cattura (non essendo presente l'ora nella pagina di stato del mio router).

Grazie in anticipo

TheClash
TheClash
Newbie
 
Post: 4
Iscritto il: 26/11/09 13:37

Re: Query dinamica web

Postdi Anthony47 » 26/11/09 21:36

Ciao TheClash e benvenuto nel forum.
Dovresti dettagliare come sono organizzati i tuoi dati di partenza e come li vuoi raccogliere; oppure posta il codice che hai generato e che "affianca" in orizzontale e vedremo come fargli accodare piu' mettere una data/ora.

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

Re: Query dinamica web

Postdi TheClash » 27/11/09 00:37

Ciao Anthony e grazie per la risposta così tempestiva.

Ecco il codice:

Codice: Seleziona tutto
Sub macro_semplice()
'
' macro_semplice Macro
'
'
Dim PauseTime, Start
inizio:

    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://192.168.1.1/statisticsAG.html", Destination:=Range("$A$1"))
        .Name = "statisticsAG"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingAll
        .WebTables = "6"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = True
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
   
    PauseTime = 30
    Start = Timer
    Do While Timer < Start + PauseTime
        DoEvents
        Loop
    GoTo inizio
   
End Sub


Se può essere d'aiuto, la sorgente dei dati è la pagina di stato del router Alice Gate Voip 2 Plus, in particolare la tabella 'statistiche connessione' sotto la voce 'statistiche'.

Questa macro, utilizzando una query web, estrae la tabella ogni 30 secondi affiancandola alle tabelle prelevate nelle rilevazioni precedenti (nel dettaglio la tabella più recente rimane sempre sul lato sinistro del foglio a partire dalla cella A1 mentre via via scalano alla sua destra le tabelle subito precedenti).

Ciò che vorrei ottenere è un accodamento verso il basso ovvero che le tabelle via via estrapolate vengano stampate al di sotto delle precedenti lasciando tra l'una e l'altra due o tre righe di spazio (se per semplicità di programmazione fosse più comodo lasciare in alto la tabella più recente e accodargli le vecchie andrebbe benissimo comunque!).

E' importante che ad ogni tabella rilevata corrispondano data e ora in cui è avvenuta la cattura anche dopo che il foglio viene aggiornato; a tal proposito l'unica cosa che sono riuscito a fare è stata aggiungere una cella data/ora contenente il valore della funzione ADESSO() ma evidentemente ad ogni ciclo eseguito dalla macro tutte le celle data/ora presenti nel foglio venivano riportate al valore attuale.

Rimango in attesa.

Ciao
TheClash
Newbie
 
Post: 4
Iscritto il: 26/11/09 13:37

Re: Query dinamica web

Postdi Anthony47 » 27/11/09 02:06

Prova a modificare le righe iniziali in questo modo:
Codice: Seleziona tutto
inizio:                '<<< esistente
NewTab=cells(rows.count,1).End(xlup).offset(3,0).address     '<<<Aggiunte 3 righe; vedi Nota*
Range(NewTab).offset(-1,0).value=Now
Range(NewTab).Offset(-1, 0).NumberFormat = "dd-mmm-yy h:mm:ss;@"

    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://192.168.1.1/statisticsAG.html", Destination:=Range(NewTab))  '<<<Modificata

Non credo sara' necessario modificare il parametro della proprieta' RefreshStyle, se com'è ora non va modificalo in "xlOverwriteCells"
Nota*: non conosco la struttura dati che sara' generata; la formula esamina la colonna A e cerca la prima riga libera in coda, per inserire uno spazio libero, poi l' orario, infine il nuovo blocco dati. Se la colonna A non fosse idonea a individuare quale e' la prima riga libera allora va modificata l' istruzione marcata "<<<Aggiunte"; se non riesci da solo ti chiedo di pubblicare una immagine dei dati salvati.

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

Re: Query dinamica web

Postdi TheClash » 27/11/09 05:02

Non ho parole,
corrisponde esattamente a ciò che desideravo.

Il risultato lo puoi vedere nella figura sottostante.

Immagine

Unico piccolo neo sta nel dover allargare manualmente ogni volta la colonna A per poter leggere la cella contenente data e ora, altrimenti ottengo quanto mostrato in quest' altra figura

Immagine

Ad ogni modo grazie Anthony, mi hai dato un grande aiuto, è un piacere trovarsi in forum come questo.

TheClash
TheClash
Newbie
 
Post: 4
Iscritto il: 26/11/09 13:37

Re: Query dinamica web

Postdi Flash30005 » 27/11/09 09:18

I nei si tolgono con piccole operazioni ambulatoriali...
registra una macro che autoadatta la colonna A, il codice è comunque questo
Codice: Seleziona tutto
Columns("A:A").EntireColumn.AutoFit

lo inserisci alla fine della tua macro (prima dell' End Sub)

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: Query dinamica web

Postdi TheClash » 27/11/09 15:31

Di nuovo grazie a Flash per questo ulteriore accorgimento indolore...ora non mi rimane che approfondire le mie conoscenze in fatto di excel e VBE.

A tal proposito, avrei piacere di discutere un tema che esula da questa discussione ma che ha origine dal codice che mi avete aiutato a comporre: l'utilizzo della cpu durante il periodo di esecuzione della macro.

Se è il caso di aprire un nuovo thread o se saprete indirizzarmi verso informazioni in tal senso sarei ben felice di seguire i vostri consigli.

Ciao /TheClash
TheClash
Newbie
 
Post: 4
Iscritto il: 26/11/09 13:37

Re: Query dinamica web

Postdi Anthony47 » 28/11/09 00:39

Eh, pensavo che ti avrebbe risposto Flash sul problema della Cpu :D
Il meccanismo del Do while : Do Events : Loop e' infatti idoneo a gestire piccole attese o attese una tantum, ma non e' il massimo per cicli che vanno eseguiti in continuazione, sia perche' satura inutilmente la cpu sia perche' alcune prestazioni non sono disponibili mentre la macro e' in esecuzione (basta provare con Copia & Incolla).
La mia raccomandazione e' che fai una macro per la query web che in coda rischedula se stessa tra N secondi, usando il metodo "OnTime".
Per questo metodo guarda in una delle precedenti discussioni sul tema, ad esempio
viewtopic.php?t=52172
viewtopic.php?f=26&t=66800

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


Torna a Applicazioni Office Windows


Topic correlati a "Query dinamica web":


Chi c’è in linea

Visitano il forum: Nessuno e 153 ospiti