Condividi:        

Power query - scarire stessa tabella da più link

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

Power query - scarire stessa tabella da più link

Postdi Denis7 » 05/06/20 00:31

Ciao a tutti,

sto provando a smanettare un po' con power query, modificando dall'editor si possono inserire più link da cui scaricare la stessa tabella oppure se ne può scaricare soltanto uno alla volta?

di seguito allego il codice per essere più chiaro

Codice: Seleziona tutto
let
    Origine = Web.Page(Web.Contents("http://www.progsport.com/basketball/bsk-predictions-160202.html")),
    Data1 = Origine{1}[Data],
    #"Modificato tipo" = Table.TransformColumnTypes(Data1,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", Int64.Type}, {"Column5", Int64.Type}, {"Column6", type number}, {"Column7", type number}, {"Column8", type number}, {"Column9", Int64.Type}, {"Column10", Int64.Type}, {"Column11", type number}, {"Column12", Int64.Type}, {"Column13", Int64.Type}, {"Column14", Int64.Type}, {"Column15", type text}}),
    #"Suddividi colonna in base al delimitatore" = Table.SplitColumn(#"Modificato tipo", "Column15", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"Column15.1", "Column15.2", "Column15.3"}),
    #"Modificato tipo1" = Table.TransformColumnTypes(#"Suddividi colonna in base al delimitatore",{{"Column15.1", Int64.Type}, {"Column15.2", type text}, {"Column15.3", Int64.Type}}),
    #"Rimosse colonne" = Table.RemoveColumns(#"Modificato tipo1",{"Column1"}),
    #"Suddividi colonna in base al delimitatore1" = Table.SplitColumn(#"Rimosse colonne", "Column3", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"Column3.1", "Column3.2"}),
    #"Modificato tipo2" = Table.TransformColumnTypes(#"Suddividi colonna in base al delimitatore1",{{"Column3.1", type text}, {"Column3.2", type text}}),
    #"Divisa colonna" = Table.TransformColumns(#"Modificato tipo2", {{"Column6", each _ / 100, type number}}),
    #"Divisa colonna1" = Table.TransformColumns(#"Divisa colonna", {{"Column7", each _ / 100, type number}}),
    #"Divisa colonna2" = Table.TransformColumns(#"Divisa colonna1", {{"Column8", each _ / 10, type number}}),
    #"Divisa colonna3" = Table.TransformColumns(#"Divisa colonna2", {{"Column11", each _ / 10, type number}}),
    #"Rinominate colonne" = Table.RenameColumns(#"Divisa colonna3",{{"Column2", "CAMPIONATO"}, {"Column3.1", "CASA"}, {"Column3.2", "TRASFERTA"}, {"Column4", "PROB. CASA"}, {"Column5", "PROB.TRASF"}, {"Column6", "QUOTA CASA"}, {"Column7", "QUOTA TRSAF"}, {"Column8", "LINEA HAND."}, {"Column9", "PROB. CASA H"}, {"Column10", "PROB. TRASF. H"}, {"Column11", "LINEA BOOK"}, {"Column12", "PROB. UNDER"}, {"Column13", "PROB.OVER"}, {"Column14", "LINEA PREV."}, {"Column15.1", "RISULTATO CASA"}, {"Column15.2", "RISULTATO TRASF."}, {"Column15.3", "OVER TIME"}}),
    #"Modificato tipo3" = Table.TransformColumnTypes(#"Rinominate colonne",{{"RISULTATO TRASF.", Int64.Type}}),
    #"Colonna condizionale aggiunta" = Table.AddColumn(#"Modificato tipo3", "VINCENTE", each if [RISULTATO CASA] > [#"RISULTATO TRASF."] then "CASA" else "TRASFERTA"),
    #"Aggiunta colonna personalizzata" = Table.AddColumn(#"Colonna condizionale aggiunta", "DIFF.PUNTI", each [RISULTATO CASA]-[#"RISULTATO TRASF."]),
    #"Valore assoluto calcolato" = Table.TransformColumns(#"Aggiunta colonna personalizzata",{{"DIFF.PUNTI", Number.Abs, type number}}),
    #"Aggiunta colonna personalizzata1" = Table.AddColumn(#"Valore assoluto calcolato", "TOTALE PUNTI", each [RISULTATO CASA]+[#"RISULTATO TRASF."]),
    #"Colonna condizionale aggiunta1" = Table.AddColumn(#"Aggiunta colonna personalizzata1", "PREVISIONE", each if [PROB. CASA] > [PROB.TRASF] then "CASA" else "TRASFERTA"),
    #"Modificato tipo4" = Table.TransformColumnTypes(#"Colonna condizionale aggiunta1",{{"VINCENTE", type text}, {"PREVISIONE", type text}}),
    #"Rinominate colonne1" = Table.RenameColumns(#"Modificato tipo4",{{"PREVISIONE", "PREVISIONE TaT"}}),
    #"Colonna condizionale aggiunta2" = Table.AddColumn(#"Rinominate colonne1", "PREVISIONE U/O", each if [PROB. UNDER] > [PROB.OVER] then "UNDER" else "OVER"),
    #"Colonna condizionale aggiunta3" = Table.AddColumn(#"Colonna condizionale aggiunta2", "ESITO U/O", each if [TOTALE PUNTI] <= [LINEA BOOK] then "UNDER" else "OVER"),
    #"Colonna condizionale aggiunta4" = Table.AddColumn(#"Colonna condizionale aggiunta3", "WIN/LOSE ", each if [VINCENTE] = [PREVISIONE TaT] then "WIN" else "LOSE"),
    #"Aggiunta colonna personalizzata2" = Table.AddColumn(#"Colonna condizionale aggiunta4", "DIFF. PREV./BOOK", each [#"LINEA PREV."]-[LINEA BOOK]),
    #"Aggiunta colonna personalizzata3" = Table.AddColumn(#"Aggiunta colonna personalizzata2", "DIFF. PREV/RIS", each [#"LINEA PREV."]-[TOTALE PUNTI]),
    #"Aggiunta colonna personalizzata4" = Table.AddColumn(#"Aggiunta colonna personalizzata3", "DIFF. RIS/BOOK", each [TOTALE PUNTI]-[LINEA BOOK]),
    #"Colonna condizionale aggiunta5" = Table.AddColumn(#"Aggiunta colonna personalizzata4", "OK/NO", each if [#"PREVISIONE U/O"] = [#"ESITO U/O"] then "OK" else "NO")
in
    #"Colonna condizionale aggiunta5"
Denis7
Utente Junior
 
Post: 13
Iscritto il: 09/02/18 17:55

Sponsor
 

Re: Power query - scarire stessa tabella da più link

Postdi Denis7 » 07/06/20 21:26

Provo a cambiare la mia domanda:

Si può creare un codice vba che faccia lo stesso lavoro del codice scritto sopra però su più link contemporaneamente?
Denis7
Utente Junior
 
Post: 13
Iscritto il: 09/02/18 17:55

Re: Power query - scarire stessa tabella da più link

Postdi Anthony47 » 08/06/20 01:34

Si può creare un codice vba che faccia lo stesso lavoro del codice scritto sopra però su più link contemporaneamente?
Posta cosi', alla domanda potra' rispondere solo un conoscitore delle Power Query...
Quindi trasformo la tua domanda in:
Come si possono importare tabelle da piu' pagine web?
Spero di non averla deformata eccessivamente...

Avevamo gia' fatto qualcosa su questo argomento, ma ripartiamo da zero.

Questa e' una Macro standard in grado di importare sul foglio attivo tutte le tabelle presenti in una pagina web, purche' con struttura html pari a Table:
Codice: Seleziona tutto
Sub GetTabbbSub(ByVal myURL As String)
'Va Chiamata passandogli l'URL da leggere
Set IE = CreateObject("InternetExplorer.Application")
'
With IE
    .navigate myURL
    .Visible = True
'Stop                                  'Vedi TESTO
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With
'
myStart = Timer  'attesa addizionale
Do
    DoEvents
    If Timer > myStart + 1 Or Timer < myStart Then Exit Do
Loop
'Scrive le tabelle SUL FOGLIO ATTIVO
Set myColl = IE.document.getElementsByTagName("TABLE")
For Each myItm In myColl
    Cells(I + 1, 1) = "Table# " & TI + 1
    TI = TI + 1: I = I + 1
    For Each tRtR In myItm.Rows
        For Each tDtD In tRtR.Cells
            Cells(I + 1, J + 1) = tDtD.innerText
            Cells(I + 1, J + 1).HorizontalAlignment = xlLeft
            'Legge hyperlink:
                If InStr(1, tDtD.innerHTML, "href", vbTextCompare) > 0 Then
                DoEvents: DoEvents
'                    ActiveSheet.Hyperlinks.Add anchor:=Cells(I + 1, J + 1), _
                       Address:=tDtD.getElementsByTagName("a")(0).href
                End If
            If J > 0 And Len(Cells(I + 1, J + 1)) > 2 Then cz = 1
            J = J + 1
        Next tDtD
        'Allinea al centro se e' una Intestazione:
        If tRtR.className = "js-tournament" Then
            Cells(I + 1, 1).HorizontalAlignment = xlCenter
        End If
        I = I + 1: J = 0
DoEvents
    Next tRtR
I = I + 1
Next myItm
'
'Chiusura IE
IE.Quit
Set IE = Nothing
End Sub

La richiamerai "passandogli" l'url da esaminare e dopo aver selezionato il foglio da utilizzare.
Ad esempio potresti usare Foglio1 per creare la lista delle pagine da importare (da A2 verso il basso) e accanto (quindi da B2 verso il basso) il nome del foglio su cui importare, e poi usare questa macro per attivare l'importazione:
Codice: Seleziona tutto
Sub CallAll()
Dim LiSh As String, LastA As Long, I As Long
'
LiSh = "Foglio1"        '<<< Il foglio che contiene l'elenco Url /Foglio su cui importare
'NB:
'Da A2 verso il basso: Url da importare;   da B2 verso il basso: Foglio su cui importare
'
For I = 2 To Sheets(LiSh).Cells(Rows.Count, "A").End(xlUp).Row
    Sheets(Sheets(LiSh).Cells(I, 2).Value).Select
    Range("A:Z").ClearContents          'NB: Il fofglio SARA' AZZERATO senza preavviso
    Range("A:Z").NumberFormat = "@"     'Colonne in formato Testo
    Call GetTabbbSub(Sheets(LiSh).Cells(I, 1).Value) '  "Chiama" la GetTabbbSub
    Range("A:Z").WrapText = False
Next I
MsgBox ("Importazione completata...")
End Sub
ATTENZIONE: le colonne A:Z dei fogli su cui si fara' l'importazione saranno AZZERATI SENZA PREAVVISO

Le tabelle sono precedute da una intestazione del tipo Table# xyz che ti potra' aiutare a localizzare quella di tuo interesse; vedi se riesci ad adattare al tuo scopo.

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


Torna a Applicazioni Office Windows


Topic correlati a "Power query - scarire stessa tabella da più link":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti