Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Vba e Html

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

Re: Vba e Html

Postdi calculon » 26/11/12 18:32

Hai ragione, sto mischiando troppe cose insieme.

La mia esigenza è quella di controllare in qualche modo l'evento download su internet explorer.
Come dicevo qualche post più in là, il file pdf di mio interesse - al click su un link - viene aperto direttamente sul browser. Poiché con gli strumenti che offre la libreria microsoft internet controls non riesco a capire esattamente quando il download si è concluso, ho pensato di aggirare il problema andando a pescare il file direttamente nella cartella dei file temporanei di internet explorer, così da stabilire con un ciclo do loop l'esistenza o meno del documento in questione.

Per fare questa verifica conosco il nome del file e parte del percorso. Perché parte del percorso? Perché ho notato che i file temporanei vengono salvati (sembrerebbe random) su delle subfolders della dir content.ie5. Se capissi il criterio che internet explorer stabilisce nella ripartizione delle immagini fra queste cartelle avrei risolto il problema, altrimenti vorrei trovare un altro modo per reperire l'esistenza del documento.

questo è quello che ho fatto con profitto se il file venisse salvato sempre sulla stessa cartella.

do until dir("C:\Users\Roberto\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\70GY84CJ\ciao.pdf")<> 0
loop

Spero di essere stato chiaro, altrimenti siete autorizzati a mandarmi al diavolo.

Grazie mille
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Sponsor
 

Re: Vba e Html

Postdi Anthony47 » 27/11/12 01:25

La mia esigenza è quella di controllare in qualche modo l'evento download su internet explorer.
Veramente mi aspettavo qualcosa piu' ad alto livello, tipo "Ho bisogno di scaricare periodicamente dal sito Istat una serie di documenti pdf per archiviarli sul mio disco", e allora avrei provato a spiegarti come sarebbe stato possibile scaricare un file da web usando la funzione URLDownloadToFile e poi eventualmente aprirlo in Adobe Reader.
Ad esempio con un codice come questo:
Codice: Seleziona tutto
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
  "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
    szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
 
Sub GetWebFile()
Dim PathNName As String, URL As String
Dim mySplit, Resp As Long
URL = "http://www.istat.it/it/files/2012/06/modulo_acquisto.pdf"
mySplit = Split(URL, "/")
PathNName = ThisWorkbook.Path & "\" & mySplit(UBound(mySplit))
Resp = URLDownloadToFile(0, URL, PathNName, 0, 0)
If Resp = 0 Then
    MsgBox ("Scaricato: " & PathNName)
'!! Controllare path di Adobe Reader sul pc!!   '<<<
    RetVal = Shell("C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe " & PathNName, 1)
    Exit Sub
Else
    MsgBox ("Errore " & Resp)
End If

End Sub
Mettere in testa a un Modulo, personalizzare url del file e path & file name di Adobe Reader, poi lanciare la macro GetWebFile.

Ti aspetto con qualche dettaglio relativo al tuo problema...
Spero di essere stato chiaro, altrimenti siete autorizzati a mandarmi al diavolo.
Speravi di cavartela con poco, ma qui abbiamo altre forme di tortura...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba e Html

Postdi calculon » 14/01/13 23:21

Ciao a tutti,
dopo diversi giorni di test sono giunto a questa conclusione:
a) il codice che mi hai consigliato funziona benissimo laddove la "class" html è di questo tipo "<a class="download pdf"
b) se la classe è invece "<a class="new_window"" per ciascun link di riferimento si crea sì un file, ma il contenuto non è altro che una porzione della pagina html.

Cosa ve ne pare?

grazie mille
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: Vba e Html

Postdi Anthony47 » 15/01/13 01:46

Se mi dai un url di riferimento e un esempio di che prove fare magari riusciro' a proporre altro.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba e Html

Postdi calculon » 15/01/13 09:12

Una qualsiasi slide di questa pagina

http://www.didattica.unitus.it/web/dida ... idMat=1830

:cry:

Grazie Antony
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: Vba e Html

Postdi Anthony47 » 15/01/13 16:45

Ripeto che se si vuole automatizzare l' accesso a pagine web la chiave e' la lettura e la decodifica del codice sorgente delle pagine.
Nel caso specifico, nell' ipotesi di voler scaricare il pdf Presentazione del corso 2012 2013, ti troveresti a ragionare su questo codice sorgente:
Codice: Seleziona tutto
<li><a href="javascript:aprifinestra('/web/scaricatore.asp?c=5eqdfwg3es5w1ab82qrhibe5b&par=1','300','250')"> <img src="/img/pdf_med.gif" title="" border="0" ></a><strong>Presentazione del corso 2012 2013</strong><br />Blocco slide 0</li>
Da esso
Da esso si deduce che viena caricata in una nuova finestra la pagina /web/scaricatore.asp?c=5eqdfwg3es5w1ab82qrhibe5b.
E' quindi sufficiente, nella macro che ti avevo gia' portato ad esempio, usare
Codice: Seleziona tutto
URL = http://www.didattica.unitus.it/web/scaricatore.asp?c=5eqdfwg3es5w1ab82qrhibe5b
per avviare da vba l' operazione analoga.
C' e' anche un problema di "nome file": nell' esempio il nome file era l' utima parte dell' Url, in questo caso potresti usare il codice interno del documento (5eqdfwg3es5w1ab82qrhibe5b), per cui modificherai anche l' istruzione che compila mySplit e quella che compila PathNName; insomma vanno modificate in blocco queste tre istruzioni:
Codice: Seleziona tutto
URL = "http://www.didattica.unitus.it/web/scaricatore.asp?c=5eqdfwg3es5w1ab82qrhibe5b"
mySplit = Split(URL, "=")
PathNName = ThisWorkbook.Path & "\" & mySplit(UBound(mySplit)) & ".pdf"

Volendo puoi inizialmente crearti un elenco di file disponibili, ad esempio con questa macro crei questo elenco in colonna G:I di Foglio5:
Codice: Seleziona tutto
Sub ListaDownl()
'wip per calculon
'vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=95343
Dim myColl As Object
myURL = "http://www.didattica.unitus.it/web/didattica.asp?azione=schedaMat&idMat=1830"   '
'
Set IE = CreateObject("InternetExplorer.Application")
'
Sheets("Foglio5").Select
Range("G:I").Clear
'
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
Do
    DoEvents
    If Timer > myStart + 2 Or Timer < myStart Then Exit Do
Loop
'
'cerca ed elenca in G:I i Documenti disponibili
Set myColl = IE.document.getElementById("listaFileAllegatiMat")
Set my2Coll = myColl.getElementsByTagName("a")
Set my3Coll = myColl.getElementsByTagName("li")
For KK = 0 To my2Coll.Length - 1
    mySplit = Split(my2Coll(KK).href, "=")
    If UBound(mySplit, 1) > 0 Then
        Cells(KK + 1, 7) = Replace(mySplit(1), "&par", "")
        mySplit = Split(Replace(my3Coll(KK).innerText, Chr(13), ""), Chr(10))
        Cells(KK + 1, 8).Resize(1, 2) = mySplit
    End If
Next KK

'Chiusura IE
IE.Quit
Set IE = Nothing
End Sub

In questo modo puoi usare la tabella di col G per compilare URL della macro GetWebFile, che quindi potrebbe essere organizzata in un loop per estrarre e salvare tutti i documenti.

Inutile dire che tutto cio' e' basato sull'analisi del sorgente html "attuale" della pagina che hai usato come esempio; altre pagine richiederanno un approccio formalmente analogo, ma sostanzialmente diverso.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba e Html

Postdi calculon » 15/01/13 23:48

Benissimo. Mi hai dato l'ennesima lezione.
Purtroppo il problema che incontro è ulteriore e in parte diverso (speravo con l'esempio di riuscire a trovare una soluzione da adattare) tant'è che non riesco a gestire il download secondo i tuoi insegnamenti. Ad esempio, per questo sito intranet anziché ottenere il pdf, mi trovo salvato un documento in formato html.


a class="new_window" href="/Servizi/richiesta.dometodo=apri&amp;idRichiesta=711783502&amp;servizio=NSG"><img alt="Apri" src="/img/ApriFile.jpg"></a>

L'url è dato da un "http://www.pcfacile.com/forum/Servizi/richiesta.dometodo=apri&amp;idRichiesta=711783502&amp;servizio=NSG"

peccato non potertelo far visitare.

Grazie Antony
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: Vba e Html

Postdi Anthony47 » 16/01/13 01:00

Hai capito che senza accesso al sito non si va lontano...
Comunque, cliccando da mouse quel link che cosa succede?
E la macro di test che hai usato, limitandola al tentativo di scaricare un singolo documento, quale e'?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba e Html

Postdi calculon » 16/01/13 11:12

Cliccando il link mi appare la finestra per il salvataggio, quindi Apri, Salva con nome ecc.

Speriamo tu possa rilevare qualche errore nel mio codice.

Grazie davvero! :)

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal sURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" (ByVal sBuffer As String, lSize As Long) As Long


Function DownloadFile(sURL As String, LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, sURL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function

Const UNC = "C:\salva\"

sURL = "https://ilsito.chevorreispezionare.it/Servizi/ConsultazioneRichieste.do?metodo=apri&idRichiesta=712169315&servizio=NSG"

filename = "ciao" & ".PDF"

LocalFilename = UNC & filename

Debug.Print DownloadFile(sURL, LocalFilename)
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: Vba e Html

Postdi Anthony47 » 16/01/13 15:50

Perdona, prima di provare soluzioni piu' articolate e sofisticate, vedasi l' uso di una Function intermedia, ti suggerirei di partire dal codice della macro dimostrativa che ti avevo suggerito qui: viewtopic.php?f=26&t=95343&start=20#p561186

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba e Html

Postdi calculon » 16/01/13 19:09

Sì Antony, è l'evoluzione della tua macro anch'essa già testata. Nessun risultato positivo.

Che fai, vieni in ufficio da me domattina per trovare l'arcano? :lol:

Grazie mille. davvero!
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: Vba e Html

Postdi calculon » 16/01/13 20:47

...dove milioni di tentativi, ho l'impressione che la tua api venga bloccata da qualche impostazione di sicurezza. Non è possibile che ovunque funzioni e solo in questo sito (istituzionale) risulti inefficace. Il massimo che sono riuscito a fare, e solo grazie ai tuoi consigli, è di ottenere un download del codice html!

Boooo
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: Vba e Html

Postdi Anthony47 » 16/01/13 21:30

Veramente avevo suggerito di lavorare col mio codice semplicemente perche' era piu' elementare e perche' venivano segnalati in chiaro eventuali errori...
Noto ora che la tua connessione e' con protocollo https, ma non sono riuscito a capire se la URLDownloadToFile e' compatibile.
Col tuo codice, il debug.print che indicazioni ti da?
Avevi inoltre detto che veniva invece salvato un documento html: che cosa c' e' scritto in questo html?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba e Html

Postdi Anthony47 » 16/01/13 22:27

In attesa del tuo feedback ho provato su un sito di homebanking con connessione https, e il comando viene rigettato con disprezzo dal server; la pagina html salvata (anche se con estensione ".pdf") contiene un testo che dice:
Tempo di collegamento scaduto o utente non abilitato.

Sembra che il protocollo non sia supportato, e la cosa non mi sembrerebbe nemmeno strana, visto che le pagine https non lasciano traccia ad esempio tra i file temporanei.

Mi interessa lo stesso avere le risposte alle due domande poste prima, intanto cerco una conferma o smentita della compatibilita' con https.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Vba e Html":


Chi c’è in linea

Visitano il forum: Anthony47 e 7 ospiti