Estrarre dati da una pagina web interagendo con le opzioni presenti

Anonimo
2014-06-09T12:09:22+00:00

Buongiorno a tutti,

mi chiamo Luca e pongo questa domanda per cercare di risolvere un problema. In questo periodo sto cercando di estrarre dei dati da una pagina web e portarli in ms Excel.

La pagina web è questa

http://re.jrc.ec.europa.eu/pvgis/apps4/pvest.php#

dove si possono trovare diversi dati relativi all'irragiamento solare in Europa. In pratica si può sapere qual è l'energia che la terra riceve dal sole tenendo conto delle ombre generate dai rilievi montuosi. Può essere utile per chi vuole progettare una meridiana, ad esempio per verificare come i rilievi montuosi possono ombreggiare una determinata località e quindi valutare se un orologio solare può essere o meno realizzato.

Attualmente:

a) seleziono sulla mappa un punto che mi interessa

b) seleziono le opzioni "show horizon" e "Text file" e tramite il pulsante "Calculate" e ottengo un file in formato txt

c) dal file txt ottengo diversi dati, come quelli qui riportati in forma breve (sono sei colonne con il valore azimuth che varia da -180 a +180)

Azimuth  Hh  Azimuth Hsun,w  Azimuth  Hsun,s

-180.0       7  -180           0            -180          0

-172.5       9  -162           0            -173          0

-165.0       10  -146         0            -165          0

-157.5       12  -133         0            -158          0

... ... ... ... ... ... ...

dove azimuth rappresenta l'orientamento (nord=-180/+180, sud=0 e via dicendo), Hh rappresenta l'angolo di elevazione dei monti sopra l'orizzonte rappresentato per punti e hsun, w e s (winter e summer) rappresentano l'angolo di elevazione del sole sull'orizzonte in funzione della stagione (inverno ed estate, in corrispondenza dei solstizi).

Vorrei provare ad automatizzare la raccolta dei dati (anche tramite Excel vba) in modo da:

  1. aprire la pagina web (magari direttamente dentro il foglio di Excel) oppure inserire direttamente in Excel le coordinate del luogo interessato (qualora la prima possibilità fosse eccessivamente complicata)
  2. selezionare le opzioni come indicato nei punti a,b,c di cui sopra
  3. creare il file txt
  4. importare i dati delle colonne sopra presentate (azimuth, Hh, hsun w e s) in modo da poterli analizzare con calma in excel

Questo modo di lavorare potrebbe essere utile per evitare il lavoro ripetitivo del naviga-scegli-clicca-copia-incolla, soprattutto se fatto per molte località (studi regionali o su vaste aree). In effetti potrei con altri algoritmi fare variare le coordinate in modo da avere determinati valori dell'ombreggiamento delle montagne per determinati punti.

Non so da dove iniziare. Avete qualche idea? Non sono riuscito a trovare nulla sull'interazione di Excel con un web browser (soprattutto per la selezione di opzioni o l'esecuzione di script). Potrei forse valutare la possibilità di collegare Excel con gli script presenti nel codice html della pagina indicata?

Ringraziando per la cortesia e l'attenzione

e

scusandomi per la domanda forse bizzarra,

Cordiali Saluti

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-06-22T16:57:00+00:00

    ...

    Dim objMSHTML As New MSHTML.HTMLDocument 

    Dim objDoc As MSHTML.HTMLDocument 

    Excel infatti mi dice che il "Tipo definito dall'utente non è definito". In effetti vorrei evitare di aprire il file generato in internet explorer, leggendolo direttamente da internet. Mi sembra di aver capito che quando ho compilato tutte le caratteristiche nella pagine web e seleziono il pulsante "Calculate" viene creata una copia temporanea del file sul server che poi posso scaricare (ma non ne solo sicuro).

    Sapete aiutarmi? Allego al mio messaggio le caratteristiche del PC in uso. 

    Il codice che hai trovato si avvale della libreria 'Microsoft HTML Object Library' che deve essere referenziata nel tuo codice prima di utilizzarla. Puoi farlo in due modi ed il primo, inconsciamente, lo hai già adoperato per utilizzare internet explorer:

    • definisci un oggetto generico e poi utilizzi CreateObject,, il codice diventerà:

    Dim htmlDoc As Object

    Set htmlDoc = CreateObject("HTMLFile")

    • aggiungi al tuo file il riferimento alla libreria che intendi utilizzare: dal menù Strumenti, Riferimenti cerca e metti la spunta a Microsoft HTML Object Library.

    Tra le due, io personalmente, utilizzerei la seconda, ma non solo, aggiungerei il riferimento anche per internet explorer. In tal caso la voce da spuntare sarebbe Microsoft Internet Controls. 

    Puoi trovare molto materiale in rete per approfondire l'argomento, che tecnicamente si chiama early/late binding,. Questoil primo che mi capita sottomano.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-06-22T14:15:10+00:00

    Ok,

    mi sono appena accorto che il primo problema è banale. Nel codice ho scritto showorizon anzichè showHorizon... senza una h il pezzo di codice non poteva funzionare.

    Almeno ho risolto il primo problema.

    Rimane ancora il nodo del secondo problema.

    Ringraziando per la cortesia e l'attenzione,

    Cordiali Saluti

    Luca

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-06-22T14:06:57+00:00

    Buongiorno a tutti,

    riapro il post perchè sto avendo alcuni problemi che non credevo di incontrare.

    Problema 1) Ho seguito le indicazioni dei link fornitemi da AndyCap64 e quelle trovate nel link sopra indicato. Sono riuscito a elaborare il seguente codice

    Sub prova()

        Dim IE As Object

        If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")

        Set IE = CreateObject("InternetExplorer.Application")

        IE.navigate "http://re.jrc.ec.europa.eu/pvgis/apps4/pvest.php#"

        IE.Visible = True

        Do While IE.Busy Or IE.readyState <> 4

        DoEvents

        Loop

            IE.document.all.Item("LATBOX").Value = Cells(22, 6)

            IE.document.all.Item("LONBOX").Value = Cells(23, 6)

            IE.document.all.Item("LONBOX").Select

            SendKeys "{ENTER}", True

            IE.document.getElementByID("plotdatagraph_PV").Select

            IE.document.getElementByID("plotdatagraph_PV").Click

            REM IE.document.getElementByID("showorizon_PV").Select

            REM IE.document.getElementByID("showorizon_PV").Click

            IE.document.getelementsbyname("outputchoicebuttons").Item(1).Checked = True

            IE.document.getElementByID("PVchoicesubmit").Select

            SendKeys "{ENTER}", True

    End sub

    Il codice di cui sopra si riferisce alla pagina indicata e 

    1. inserisce le coordinate lette da excel (ovvero cells(22,6) e cells (23,6)) e le inserisce nelle caselle LATBOX e LONBOX presenti sulla pagina web
    2.  si posizione sulla casella LONBOX e preme ENTER in modo da creare il puntatore all'interno della finestra di google maps
    3. selezione e clicca la checkbox "Show graphs" (il suo ID è plotdatagraph_PV)

    Io però non riesco a far selezionare anche la checkbox "Show orizon" (il suo ID è showorizon_PV), mi dà errore (infatti ho anteposto al codice la stringa REM). Sapete come mai?

    Problema 2) Il codice continua selezionando il radio button "text file" poi seleziona il pulsante "Calculate" e genera il file in formato txt.

    Io però ho trovato il codice al link di cui sopra

    http:\archi.forumup.it\about5387-0.html

    che nella parte finale fa questo

    Dim objMSHTML As New MSHTML.HTMLDocument 

    Dim objDoc As MSHTML.HTMLDocument 

    Set objDoc = objMSHTML.createDocumentFromUrl("http://re.jrc.ec.europa.eu/pvgis/apps4/PVcalc.php", vbNullString) 

    Do While objDoc.readyState <> "complete" 

    DoEvents 

    Loop 

     Application.Wait (Now + TimeValue("0:00:2")) 

     SendKeys ("^a") 

     SendKeys ("^c") 

     SendKeys ("^w") 

    Sheets("Supporto Maschera").Select 

    Range("G3").Select 

    ActiveSheet.PasteSpecial Format:="Text", link:=False, DisplayAsIcon:=False 

    Sheets("Supporto Maschera").Select 

    Range("G2:G39").Select 

        Selection.TextToColumns Destination:=Range("M2"), DataType:=xlDelimited, _ 

            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ 

            Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ 

            :=Array(Array(1, 2), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ 

            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1)), _ 

            DecimalSeparator:=".", ThousandsSeparator:=",", TrailingMinusNumbers:= _ 

            True 

        ActiveWindow.SmallScroll Down:=18 

    Sheets("Parametri").Select 

    Range("c12").Select 

    TextBox1.Text = ActiveCell 

    In pratica questa parte di codice dovrebbe (credo) leggere direttamente il file di testo da internet, estrarne una parte e poi inserirla in excel. Il problema è che non riesco a fare funzionare il codice perchè mi dà errore già dalle prime due righe

    Dim objMSHTML As New MSHTML.HTMLDocument 

    Dim objDoc As MSHTML.HTMLDocument 

    Excel infatti mi dice che il "Tipo definito dall'utente non è definito". In effetti vorrei evitare di aprire il file generato in internet explorer, leggendolo direttamente da internet. Mi sembra di aver capito che quando ho compilato tutte le caratteristiche nella pagine web e seleziono il pulsante "Calculate" viene creata una copia temporanea del file sul server che poi posso scaricare (ma non ne solo sicuro).

    Sapete aiutarmi? Allego al mio messaggio le caratteristiche del PC in uso. 

    Buona domenica,

    Saluti

    Luca


    Caratteristiche PC

    Intel Pentium i7 - 64 bit

    Office 2010 home and business

    Internet Explorer 11

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-06-13T20:17:13+00:00

    Buonasera,

    ti ringrazio per i collegamenti, sono molto utili.

    A chi arrivasse qui con la stessa domanda propongo anche questo link

    http://archi.forumup.it/about5387-0.html

    su cui si possono trovare porzioni di codice legate, in parte, al mio stesso problema.

    Grazie ancora per la cortesia e buon lavoro!

    Saluti,

    Luca

    La risposta è stata utile?

    0 commenti Nessun commento