Condividi:        

Excel: "La query web non ha restituito dati" (ma esistono)

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: "La query web non ha restituito dati" (ma esistono)

Postdi giulio.tubo » 14/11/15 16:07

Buongiorno a tutti, leggendo in questa sezione del forum ho trovato soluzioni alternative (ma complesse) al problema che sto per illustrare ma data la sua natura particolare vorrei provare a chiedre un ulteriore parere a agli esperti che frequentano questo forum.

Da circa un anno utilizzo un foglio excel (realizzato ed eseguito su MS office 2007 Pro) che esegue una serie di query web (automaticamente all'apertura del file) selezionando specifiche tabelle presenti sulle pagine html e riportando i risultati privi di formattazione su uno specifico foglio del file xlsx.

Da ieri (e mai prima d'ora) mi viene restituito il classico errore "La query non ha restituito dati. Per modificare la query... ecc".
Tuttavia le pagine web in questione non sembrano cambiate (i dati esistono e sono ancora intabellati esattamente proprio come da un anno a questa parte). Di seguito un esempio delle pagine web censite: http://www.reuters.com/finance/stocks/financialHighlights?symbol=PRY.MI

Chiunque può provare da se a inserire l'indirizzo in questione in una semplicissima query web e vedere che i dati vengono visualizzati nel mini-browser di excel ma questi non vengono poi catturati come invece avviene per una pagina simile (ma con dati diversi) come questa: http://it.reuters.com/investing/stocks/quote?symbol=PRY.MI

Le mie domande ed ipotesi sono queste:
Domanda: è possibile che sulla pagina possano essere stati messi dei "blocchi" per impedire il recupero dei dati da query web? Se si esiste un modo per evitarli?
Ipotesi: Ho notato che questa cosa si è verificata dopo che windows ha effettuato l'aggiornamento di sicurezza "KB915597". Domanda: Potrebbe essere che questo aggiornamento abbia impedito il regolare funzionamento della query? qualcuno che non lo ha ancora fatto potrebbe fare una prova?
Ipotesi finale: navigando nel forum viene spesso consigliato di sostituire le query web con macro per ottenere risultati simili. Nello specifico ho provato a rielaborare la Macro fornita da "Anthony47" in questo tread: http://www.pc-facile.com/forum/viewtopic.php?t=104115 ma ho visto che i dati vengono caricati sempre e comunque nella cella A1 del foglio1, non vi è possibilità di selezionare le tabelle, nel mio caso si tratterebbe di riscrivere un excel costato decine di ore di lavoro (le quesry web sono veramente tante) e infine ammetto la mia conoscenza nulla di VBA. Perciò preferirei rimanere con il metodo delle semplici query web.

Chiedo scusa se sono stato un po' lungo e ringrazio infinitamente chiunque abbia voglia di consigliarmi.
giulio.tubo
Newbie
 
Post: 2
Iscritto il: 14/11/15 14:46

Sponsor
 

Re: Excel: "La query web non ha restituito dati" (ma esiston

Postdi Anthony47 » 16/11/15 02:08

Ciao giulio_tubo, benvenuto nel forum
Come e' noto le web query vanno in crisi su pagine create dinamicamente tramite script (vedi http://support.microsoft.com/kb/277899/en-us), come e' quella di cui hai pubblicato il link.
Inoltre spesso gli owner delle pagine finanziarie rendono di difficile utilizzo le loro informazioni perche' "vendono" applicazioni per l'accesso dinamico alle stesse informazioni; certamente Reuters e' una di queste.

Anche l'accesso alle pagine tramite la libreria mshtml (come fatto nell'esempio che hai linkato) e' aleatorio, perche' sempre subordinato alla lettura di parametri che il gestore del sito puo' modificare quando vuole.
Oltre a quanto presentato nel link che hai inserito, ti segnalo questa altra implementazione che rende disponibile la funzione GetTabRaim222 che, usando la stessa metodologia, importa pero' solo una tabella specifica: viewtopic.php?t=104895#p612528
la funzione GetTabRaim222 dovra' poi essere richiamata da una macro utente con istruzioni del tipo
Codice: Seleziona tutto
zzz = GetTabRaim222(" http://www.reuters.com/finance/stocks/financialHighlights?symbol=PRY.MI", 1, Range("I7"))
zzz = GetTabRaim222(" http://www.reuters.com/finance/stocks/financialHighlights?symbol=PRY.MI", 2, Range("S7"))
zzz = GetTabRaim222(" http://www.reuters.com/finance/stocks/financialHighlights?symbol=PRY.MI", 3, Range("AD7"))
Queste istruzioni importano la tabella #1 in I7 del foglio attivo, la #2 in S7 e la #3 in AD7

C'e' in realta' un problema, nel codice della funzione: io non conosco a priori lo spazio necessario per ospitare la tabella (quante righe, quante colonne) e la macro , "per stare tranquilla", cancella un'area esagerata (500 righe x 20 colonne!)
Diciamo che la funzione cosi' come e' e' idonea per leggere una tabella su un foglio a se stante, e la tabella sara' copiata dal codice della macro dell'utente nella posizione finale.
Se invece si vuole posizionare una tabella all'interno di un foglio popolato con altre informazioni, allora la cosa piu' semplice e' che la funzione non si preoccupi di azzerare l'area del foglio prima di importare la tabella; per questo bastera' cancellare la riga
myDest.Cells(1, 1).Resize(500, 10).ClearContents

Per usare la funzione GetTabRaim222, copiare tutto il codice contenuto nel messaggio linkato (viewtopic.php?t=104895#p612528) e inserirlo in un "Modulo" vuoto, creato appositamente tramite i comandi Menu /Inserisci /Modulo dell'editor delle macro.

Ma l'approccio piu' serio credo debba essere l'acquisto del software di accesso alle informazioni finanziarie del sito.

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

Re: Excel: "La query web non ha restituito dati" (ma esiston

Postdi giulio.tubo » 16/11/15 22:14

Anthony grazie infinite!
Sebbene la mia riluttanza ad usare le macro (perché non ne ho mai studiato la sintassi) sono certo che la tua soluzione di utilizzare la funzione GetTabRaim222 sia certamente quella più corretta ed elegante. Vista la mia incompetenza con le macro e lo scarso tempo che ho in questi giorni, vedrò di applicarmi e di tentare di assemblare una macro copiando e incollando codice dagli esempi che mi hai linkato nel prossimo weekend.

Tuttavia mi sento in dovere di collaborare al forum e di esporre la soluzione alternativa alla quale ero giunto domenica (prima di trovare conforto nella tua risposta). Probabilmente la mia soluzione farà rabbrividire un "purista" delle macro come te ma ti assicuro che funziona e senza scomodare macro complesse.

innanzitutto ho scoperto che l'impossibilità di catturare dalle pagine di reuters come questa http://www.reuters.com/finance/stocks/financialHighlights?symbol=PRY.MI è nata lo scorso venerdì e non è legata a degli script che costruiscono la pagina dinamicamente. Infatti avevo provato a salvare la pagina in locale e a fare una query dal mio disco (che perciò prelevava da una pagina statica al 100%) e il problema si presentava ancora. Guardando il codice html della pagina ho trovato questa riga:
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=0.75‌">
Ho provato ad eliminare i caratteri "‌" e la pagina è dicventata magicamente accessibile alle query web (da locale).
(Sembra perciò che il blocco che si verifica in excel sia dovuto ad un errore nel codice della pagina piuttosto che a una vera volontà del fornitore di impedire il prelievod ei dati).
Per rendere di nuovo tutto automatico ho creato un file batch che usa le funzioni di 2 progammini come "curl" per windows e "sed".
il primo può scaricare pagine web da semplice riga di comando; il secondo è in grado di sostituire e rimpiazzare stringhe di codice dai file, sempre da riga di comando.
Ho perciò scritto una semplice batch del tipo:
Codice: Seleziona tutto
curl http://www.reuters.com/finance/stocks/financialHighlights?symbol=PRY.MI > pry.htm
curl http://www.reuters.com/finance/stocks/financialHighlights?symbol=BMWG.DE > bmw.htm
curl http://www.reuters.com/finance/stocks/financialHighlights?symbol=ENI.MI > eni.htm
ecc ecc.
sed -i "s/75‌/75/g" *.htm

e il gioco è fatto.
ora eseguo un file batch e poi faccio partire il mio excel che preleva dati da pagina locali che aggiorno automaticamente ogni giorno.

Concludo con una battuta.
Io seguo titoli e indici azionari a livello amatoriale (per adesso) e le mie ricerche sono prevalentemente volte ad una maggiore comprensione personale di queste dinamiche, più che a fare soldi... Perciò non mi va di regalare a reuters soldi che non ho ancora guadagnato ;)
Nel weekend seguente e nei prossimi dedicherò un po' di ore per "montare" una macro come da tue indicazioni ma temo mi manchino un po' troppe basi. Nel caso riuscissi sarò ben felice di postare il risultato. In ogni caso, piuttosto di pagare reuters per avere dati che sono già di dominio pubblico ma forniti nel formato giusto preferirei pagare te per un aiuto professionale e magari diventare più autonomi nei futuri inevitabili aggiornamenti di cui potrei avere bisogno.

Un sentito ringraziamento
GT
giulio.tubo
Newbie
 
Post: 2
Iscritto il: 14/11/15 14:46

Re: Excel: "La query web non ha restituito dati" (ma esiston

Postdi Anthony47 » 16/11/15 23:53

Grazie per aver pubblicato la tua scoperta e il modo di aggirare l'ostacolo.
In ogni caso, piuttosto di pagare reuters per avere dati che sono già di dominio pubblico ma forniti nel formato giusto preferirei pagare te per un aiuto professionale e magari diventare più autonomi nei futuri inevitabili aggiornamenti di cui potrei avere bisogno
Eh eh, temo che sara' difficile, per due motivi: il primo e' che costo piu' di reuters; il secondo e' che io faccio un altro mestiere...

Alla prossima!
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel: "La query web non ha restituito dati" (ma esistono)":


Chi c’è in linea

Visitano il forum: Nessuno e 41 ospiti