Condividi:        

Excel Web Query ripetuta

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 Web Query ripetuta

Postdi anonimo13 » 27/09/13 17:53

Ciao a tutti,

sto lavorando su un foglio excel e ho bisogno di copiare dei dati da un indirizzo web. In questo caso però dovrei copiare dei dati storici, cioè devo scaricare dati da un singolo URL come ad esempio il seguente:

http://gaana.com/playlist/24092013

ma cambiando il parametro finale (la data) dell'URL ogni volta. Dovrei quindi scaricare i dati dai seguenti URL:

http://gaana.com/playlist/23092013
http://gaana.com/playlist/22092013
http://gaana.com/playlist/21092013
http://gaana.com/playlist/20092013 ecc ecc ecc

Dato che devo raccogliere dati per gli ultimi due anni dovrei, o ripetere la query da Excel cambiando ogni volta la parte finale dell'URL, oppure copiare e incollare a mano direttamente dal browser per circa 700 volte.

C'è qualche modo per far si che Excel proceda in automatico a scaricare i dati cambiando la parte finale dell'URL e accodare i dati su uno stesso foglio di lavoro? Preciso che la sezione di pagina web dell'URL che mi interessa è sempre la stessa.
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Sponsor
 

Re: Excel Web Query ripetuta

Postdi Flash30005 » 27/09/13 21:32

I link da te postati portano in una pagina senza alcuna tabella o lista da importare
forse perché bisogna loggarsi (?)

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: Excel Web Query ripetuta

Postdi ricky53 » 28/09/13 11:06

Ciao,
ci provo ma al volo perchè non avendo dei riferimenti precisi è improbabile riuscire a fare un qualcosa di valido e funzionante:
1. crea un elenco di dati che sono la parte finale dell'indirizzo web
2. con un ciclo For/Next scorri questo elenco e usi l'i-esimo valore per comporre il link completo da passare alla tua query web
3. in un altro foglio accodi i dati della query appena fatta a quelli esistenti
...

con il codice della tua query ed un tuo file di esempio insieme alla possibilità di accedere al sito ne usciremo.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Excel Web Query ripetuta

Postdi anonimo13 » 29/09/13 10:08

L'URL da cui scaricare i dati è il seguente:
http://www.consob.it/main/documenti/mer ... cation.xsl

e il parametro da cambiare è la prima data "pnc_20131102". Al cambiare di quella data ho le varie pagine web da cui scaricare la tabella a centro pagina

Su suggerimento di ricky53 sono arrivato a creare una macro ma c'è un errore (Method 'Range' of object '_Global' failed) sulla linea blu. Credo che il problema stia nel definire quel range e nell'accodare le varie tabelle dei vari giorni nello stesso foglio.
Nella macro ho assunto che i vari parametri da sostituire nell'indirizzo web sono nella colonna 10. La macro è definita soltanto per i primi 10 giorni.

Sub webquery()
startrow = 15
For i = 1 To 10
If i = 1 Then
a = Cells(1, 10)
curl = "URL;http://www.consob.it/main/documenti/mercati/shortselling/pubblicazione_pnc_20121102.xml?hkeywords=&docid=25&page=4&hits=226&nav=false&filedate=02/11/2012&xsl=shortselling_publication.xsl"
Else
a = Cells(i, 10)
curl = "http://www.consob.it/main/documenti/mercati/shortselling/pubblicazione_pnc_" & a & ".xml?hkeywords=&docid=5&page=0&hits=226&nav=false&filedate=20/09/2013&xsl=shortselling_publication.xsl"
End If

With ActiveSheet.QueryTables.Add(Connection:=curl, Destination:=Range("$A$" & startrow))
.Name = "Webquery" & i
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "11"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With

startrow = startrow + 60

Next i
End Sub
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: Excel Web Query ripetuta

Postdi scossa » 29/09/13 10:52

A me piacerebbe capire che bisogno avevi di indicare nella richiesta iniziale un link sbagliato:


facendo perdere tempo a chi ha provato a capire la tua richiesta guardando quel link, quando potevi indicare da subito quello giusto:
anonimo13 ha scritto:L'URL da cui scaricare i dati è il seguente:
http://www.consob.it/main/documenti/mer ... cation.xsl

e il parametro da cambiare è la prima data "pnc_20131102". Al cambiare di quella data ho le varie pagine web da cui scaricare la tabella a centro pagina


Mah?! :?:
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Excel Web Query ripetuta

Postdi anonimo13 » 29/09/13 11:11

scossa ha scritto:A me piacerebbe capire che bisogno avevi di indicare nella richiesta iniziale un link sbagliato:


facendo perdere tempo a chi ha provato a capire la tua richiesta guardando quel link, quando potevi indicare da subito quello giusto:
anonimo13 ha scritto:L'URL da cui scaricare i dati è il seguente:
http://www.consob.it/main/documenti/mer ... cation.xsl

e il parametro da cambiare è la prima data "pnc_20131102". Al cambiare di quella data ho le varie pagine web da cui scaricare la tabella a centro pagina


Mah?! :?:


Forse perchè la logica è sempre la stessa?!? Quello stesso procedimento devo applicarlo a diverse pagine web e l'esempio con la data finale mi sembrava il più semplice da trattare
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: Excel Web Query ripetuta

Postdi scossa » 29/09/13 11:52

anonimo13 ha scritto:Forse perchè la logica è sempre la stessa?!? Quello stesso procedimento devo applicarlo a diverse pagine web e l'esempio con la data finale mi sembrava il più semplice da trattare


Peccato solo che non portrasse ad una pagina utile:
Flash30005 ha scritto:I link da te postati portano in una pagina senza alcuna tabella o lista da importare ...

infatti restituisce Errore 404; per cui io, come credo flash, abbiamo lasciato perdere attendendo tuoi chiarimenti.
Converrai con me che se avessi postato subito il link corretto (o perlomeno un link in cui date diverse portassero a pagine diverse) si sarebbe risparmiato tempo e malintesi.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Excel Web Query ripetuta

Postdi anonimo13 » 29/09/13 13:06

Ok, scusate la prossima volta cercherò di essere più attento nel riportare le domande
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: Excel Web Query ripetuta

Postdi scossa » 29/09/13 14:42

anonimo13 ha scritto:L'URL da cui scaricare i dati è il seguente:
http://www.consob.it/main/documenti/mer ... cation.xsl

e il parametro da cambiare è la prima data "pnc_20131102". Al cambiare di quella data ho le varie pagine web da cui scaricare la tabella a centro pagina



Devi cambiare
.RefreshStyle = xlInsertDeleteCells
in
.RefreshStyle = xlOverwriteCells

altrimenti la colonna che contiene le date non sarà più la J e quindi
a = Cells(i, 10).Value
sarà una stringa vuota.

Inotlre, visto che si tratta di dati storici e quindi statici, potresti eliminare la query dopo averla eseguita (togli il commento alla riga indicata nel codice).

Codice: Seleziona tutto
Sub webquery()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim startrow As Long
  Dim i As Integer
  Dim a As String
  Dim cURL As String
 
  Set wb = ActiveWorkbook '?
  Set ws = wb.ActiveSheet '?
  startrow = 15
  For i = 1 To 2
    a = Cells(i, 10).Value
    cURL = "URL;http://www.consob.it/main/documenti/mercati/shortselling/pubblicazione_pnc_" & a & ".xml?hkeywords=&docid=5&page=0&hits=226&nav=false&xsl=shortselling_publication.xsl"
    With ws.QueryTables.Add(Connection:=cURL, Destination:=Range("$A$" & startrow))
      .Name = "Webquery" & i
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .BackgroundQuery = False
      .RefreshStyle = xlOverwriteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .WebSelectionType = xlSpecifiedTables
      .WebFormatting = xlWebFormattingNone
      .WebTables = "11"
      .WebPreFormattedTextToColumns = True
      .WebConsecutiveDelimitersAsOne = True
      .WebSingleBlockTextImport = False
      .WebDisableDateRecognition = False
      .WebDisableRedirections = False
      .Refresh BackgroundQuery:=False

      'ws.Range(.Name).QueryTable.Delete   'elimina la query vedi testo

    End With
   
    startrow = startrow + 60
 
  Next i
  Set ws = Nothing
  Set wb = Nothing
End Sub
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Excel Web Query ripetuta

Postdi anonimo13 » 29/09/13 17:55

Perfetto, funziona !!!
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: Excel Web Query ripetuta

Postdi Anthony47 » 29/09/13 22:04

Non vorrei confondere nessuno, ma mi permetto di presentare una possibile soluzione derivata da quanto fatto in passato per altro utente.

In dettaglio:
-in Foglio1 del tuo workbook inserisci la Webquery a un indirizzo qualsiasi, con i parametri suggeriti da scossa. Puoi ottenere questo eseguendo una sola volta la Sub webquery() (per questo basta inserire la macro in un nuovo Workbook, modificare da For i = 1 To 2 a For i = 1 To 1 ed eseguirla)
-poi creiamo l' elenco storico in Foglio2 usando questa macro:
Codice: Seleziona tutto
Sub webquery_2()
'
Dim wb As Workbook, QSh As Worksheet, LogSh As Worksheet
Dim I As Long, VGap As Long, dDays As Long, NextLR As Long, QtC As Long
Dim A As String, cURL As String
Dim SDate As Date, EDate As Date
'
Set wb = ActiveWorkbook '           '<<< =ThisWorkbook??
VGap = 3                            '<< N° di righe vuote tra un elenco e l' altro
Set QSh = wb.Sheets("Foglio1")      '<<< Il foglio con la Web Query
Set LogSh = wb.Sheets("Foglio2")    '<<< Il foglio dove si accumuleranno i risultati
SDate = QSh.Range("L2").Value       '<<< La cella dove e' scritta la data di partenza...
EDate = QSh.Range("M2").Value       '<<<    ... e la data di fine raccolta
'
dDays = EDate - SDate
QtC = QSh.QueryTables.Count
If QtC > 1 Then
    MsgBox ("Il foglio " & QSh.Name & " contiene " & QtC & " web Query (invece di 1)" _
        & vbCrLf & "Processo abortito")
    Exit Sub
End If
'
On Error GoTo noData
    For I = 0 To dDays
        A = Format(SDate + I, "yyyy_mm_dd")
        If IsError(Application.Match(A, LogSh.Range("A:A"), 0)) Then
            cURL = "URL;http://www.consob.it/main/documenti/mercati/shortselling/pubblicazione_pnc_" & Replace(A, "_", "") & ".xml?hkeywords=&docid=5&page=0&hits=226&nav=false&xsl=shortselling_publication.xsl"
            QSh.QueryTables(1).Connection = cURL
            QSh.QueryTables(1).Refresh BackgroundQuery:=False
'query eseguita...
            NextLR = LogSh.Cells(Rows.Count, "B").End(xlUp).Row + 1 + VGap
            NextLR = LogSh.Cells(LogSh.Rows.Count, "B").End(xlUp).Row + 1 + VGap
            If NextLR < 15 Then NextLR = 15
DoEvents
            QSh.QueryTables(1).Destination.CurrentRegion.Copy _
                Destination:=LogSh.Cells(NextLR, "B")
            LogSh.Cells(NextLR, "A").Resize(QSh.QueryTables(1).Destination.CurrentRegion.Rows.Count, 1) = A & ""
NextDay:
        End If
     
      Next I
      Set QSh = Nothing
      Set LogSh = Nothing
      Set wb = Nothing
      Exit Sub
noData:
    Beep
    Resume NextDay
    End Sub

Uso:
-copiare il codice e incollarlo in un Modulo standard dell' editor delle macro
-personalizzare le istruzioni marcate <<<
-inserire nelle celle indicate le date di inizio e fine della raccolta da eseguire (vedi <<<5 e <<<6; suggerisco di cominciare con 10-20 gg)
-avviare la macro

Dovresti trovare nel foglio indicato in <<<4 il riepilogo dei dati raccolti; i giorni senza dati vengono skippati.
Teoricamente e' possibile lanciare una nuova raccolta partendo da una data gia' presente nel foglio riepilogo; in questi casi e' vero che i dati "gia' presenti" non saranno raccolti una seconda volta, ma la query tentera' di raccoglierli per tutti gli altri "non presenti" nel foglio riepilogo, compreso i week-end e gli altri giorni festivi, con un leggero allungamento dei tempi di esecuzione (pochi decimi per ogni query).

Spero sia di qualche utilita'.
Ciao a tutti!
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel Web Query ripetuta":


Chi c’è in linea

Visitano il forum: Nessuno e 50 ospiti