Importare i dati da un fattura elettronica col vba

di il
37 risposte

37 Risposte - Pagina 3

  • Re: Importare i dati da un fattura elettronica col vba

    MarcoVBA ha scritto:


    +m2+ ha scritto:


    Io invece penso che ritenga possibile "attingere" i dati dal file XML con un banale "cerca la stringa idcodice".
    Ma, a quel punto, ci sono PIU' stringhe identiche nel file XML.
    Questa la mia interpretazione
    si esatto m2, ritengo che sia posdibile, o meglio spero.
    Questo è già un ostacolo di notevole difficoltà da superare, se non hai sufficienti basi per scrivere righe di codice, nel tuo caso di VBA.
    Se tu osservi la struttura gerarchica del file XML di una fattura elettronica, vedrai che il "tag" <IdCodice> che racchiude quello del fornitore fa parte del seguente albero del file:
    <FatturaElettronicaHeader> <CedentePrestatore> <IdFiscaleIVA> <IdCodice>
    mentre quello che racchiude quello del cliente è così strutturato:
    <FatturaElettronicaHeader> <CessionarioCommittente> <IdFiscaleIVA> <IdCodice>
    La differenza è abbastanza evidente: uno è identificato come CedentePrestatore e l'altro come CessionarioCommittente.
    Se tu vuoi recuperarne uno dei due o entrambi, devi scrivere poche righe di codice che vadano a leggere la struttura del file XML ed individuino il "tag" che ti interessa.
    Qui però mi fermo, perché non so quali siano le tue conoscenze di VBA, e anche perché non voglio infrangere il regolamento del forum!
    Se tu provi ad abbozzare il codice per fare quello che ti ho suggerito, poi eventualmente si potrà intervenire per correggere eventuali errori.
  • Re: Importare i dati da un fattura elettronica col vba

    Parlando di file excel tempo fa avevo trovato questi :

    http://www.marcogualmini.it/strumenti_fattura_elettronica.htm

    se possono servire ...
  • Re: Importare i dati da un fattura elettronica col vba

    h@rlock ha scritto:


    Parlando di file excel tempo fa avevo trovato questi :

    http://www.marcogualmini.it/strumenti_fattura_elettronica.htm

    se possono servire ...
    Grande! Era proprio quello il foglio cui accennavo
  • Re: Importare i dati da un fattura elettronica col vba

    h@rlock ha scritto:


    Parlando di file excel tempo fa avevo trovato questi :

    http://www.marcogualmini.it/strumenti_fattura_elettronica.htm

    se possono servire ...
    questa pagine mi sarebbe stata veramente utile un paio di mesi fa, peccato che non c i sono incappato prima... cmq il consiglio di dividere a blocchi é e' perfetto, posso usare lo stesso algoritmo piu o meno. la soluzione era piuttosto semplice, quindi alla fine ci sarei arrivato pero mi avete di certo semplificato la vita, per cui grazie mille a tutti. domani mi rimetto a lavoro, felice di tenervi aggiornati.
  • Re: Importare i dati da un fattura elettronica col vba

    Come non detto, il sito consigliatomi da h@rock fa proprio al caso mio visto che ha anche un visualizzatore di xml- perfetto direi
    Grazie mille!!!
  • Re: Importare i dati da un fattura elettronica col vba

    Come detto il tizio sa usare Excel meglio di me
    Però c'è un però : manca decodificare mime quindi alcune fatture non le lavora proprio del tutto
  • Re: Importare i dati da un fattura elettronica col vba

    Il tipo che ha fatto quel programma usa excel davvero benissimo, forse troppo infatti l'algoritmo che usa lui per estrarre i dati da un file xml, benchè funzionante, non l'ho capito visto che usa delle librerie che io non avevo mai approfondito. Siccome non mi piace copiare e incollare se non riesco almeno ad essere capace di farlo anche da solo ho pensato che fosse molto piu divertente e appagante scrivere un codice molto piu banale ma lo stesso utile, e me ne sono uscito cosi:

    Dim matrice(1000) As String
    Dim Stringaestratta As String
    Dim ciclo As Single


    Sub Rettangoloconangoliarrotondati4_Click()

    'apro il file che si trova sulla stessa cartella del foglio excel
    pat = ThisWorkbook.Path
    percorso2 = pat & "\prova.xml"

    If Dir(percorso2) = vbNullString Then
    MsgBox "File non trovato.", vbExclamation
    Exit Sub

    End If
    Dim linea2 As String

    Open percorso2 For Input As #1
    Do
    Input #1, linea
    linea2 = linea2 & linea

    Loop Until EOF(1) = True
    Close
    ' richiamo una function che mi restituisce come valore un blocco di testo tra un termine e l altro.

    Stringaestratta = EstraiStringaMatrice("DatiBeniServizi", linea2)


    ' richiamo la subroutine che mi consente di cercare ulteriormente nel blocco ma questa volta, servendomi piu voci, va a riempiere una matrice. 'Nell'esempio ci sono solo due voci, ovviamente basta usare la stessa subroutine per estrarre tutte le altre voci.


    Call EstraiStringaMatrice2("Descrizione", Stringaestratta)
    For b = 0 To ciclo
    'vado a scrivere il valore in una cella del foglio excel
    Range("n" & b + 32).Value = matrice(b)

    Next b
    Call EstraiStringaMatrice2("PrezzoTotale", Stringaestratta)
    For a = 0 To ciclo

    Range("o" & a + 32).Value = matrice(a)

    Next a

    End Sub



    Function EstraiStringaMatrice(Argomento As String, linea2 As String)

    Dim posizione1 As Single
    Dim posizione2 As Single

    ciclo = -1

    testoricerca1 = "<" & Argomento & ">"

    testoricerca2 = "</" & Argomento & ">"

    If InStr(linea2, testoricerca1) Then

    caratteri = Len(linea2)

    tempo = 0
    For a = 1 To caratteri

    valore = Mid(linea2, a, Len(testoricerca1))
    valore2 = Mid(linea2, a, Len(testoricerca2))
    If valore = testoricerca1 Then

    posizione1 = a + Len(testoricerca1)
    'Exit For

    End If

    If valore2 = testoricerca2 Then
    posizione2 = a
    Exit For
    End If

    Next a

    EstraiStringaMatrice = Mid(linea2, posizione1, posizione2 - posizione1)

    End If

    End Function






    Sub EstraiStringaMatrice2(Argomento As String, linea2 As String)

    Dim posizione1(1000) As Single
    Dim posizione2(1000) As Single

    ciclo = -1

    testoricerca1 = "<" & Argomento & ">"

    testoricerca2 = "</" & Argomento & ">"

    If InStr(linea2, testoricerca1) Then

    caratteri = Len(linea2)

    For a = 1 To caratteri

    valore = Mid(linea2, a, Len(testoricerca1))
    valore2 = Mid(linea2, a, Len(testoricerca2))
    If valore = testoricerca1 Then
    ciclo = ciclo + 1

    posizione1(ciclo) = a + Len(testoricerca1)

    End If

    If valore2 = testoricerca2 Then
    posizione2(ciclo) = a

    End If

    Next a

    For b = 0 To ciclo

    matrice(b) = Mid(linea2, posizione1(b), posizione2(b) - posizione1(b))

    Next b

    End If

    End Sub

    Nonostante sia meno performante mi da gli stessi risultati
  • Re: Importare i dati da un fattura elettronica col vba

    Un ultima cosa, come si cancella un variabile matrice? se ho matrice(10) tutta piena come faccio a cancellare tutti i campi? devo usare per forza un ciclo "do" o "for" o esiste un sistema piu semplice? E ancora come mai per la function si puo ridimensionare una matrice mentre in una sub possono solo rimanere i valori fissati all'inizio?
Devi accedere o registrarti per scrivere nel forum
37 risposte