Fatturazione ElettronicaProgrammare col martello

Importare fatture elettroniche XML in excel

python programming programmazione da zero python

Con questo semplice programma in Python per importare fatture elettroniche in excel possiamo decidere i campi da importare e la cartella da elaborare.

Il programma scorre tutti i file XML contenuti nella cartella e genera un file CSV (apribile da Excel) con tutti i dati che ci interessano.

Nel programma indichiamo in una lista di Python una serie di Tuple (coppie di valori) contenenti l’elemento padre del file XML e il singolo elemento con il dato di nostro interesse.

Non è l’implementazione migliore della libreria eTree ma funziona egregiamente per il nostro scopo ed è un ottimo esempio di utilizzo di Liste, Tuple, Cicli, scrittura di stringhe e accesso ai file in Python.

Se siete totalmente digiuni di Python ecco i passi per poterlo utilizzare:

Scaricate l’ultima versione di Python (il programma è testato con la versione 3.7 per windows) da:
https://www.python.org/downloads/

Una volta eseguita l’installazione potete creare un file nella stessa cartella di installazione di Python (nel nostro esempio C:\PYTHON37).

Chiamiamo questo file: exportFatture.py e incolliamoci il codice riportato in fondo a questo articolo avendo cura di cambiare solo il percorso dove andremo a mettere i nostri file di fatture in formato XML.

Nel codice in questione sono anche indicati, a titolo d’esempio, i campi da esportare.

Dopodichè accediamo alla console di comando (tasto destro sul pulsante start di Windows e selezioniamo Esegui).

Digitiamo il comando:cmd e premiamo invio.

Dopodichè possiamo scrivere: cd \python37 (o il nostro percorso d’installazione)

Infine possiamo eseguire:python esportFatture.py

Alla fine dell’elaborazione avremo i campi interessati esportati in formato .csv che potremo aprire con Excel.

Sperando di aver fatto cosa gradita a coloro che abbiano questa necessità vi invitiamo come sempre a lasciare un commento o contattarci attraverso l’apposito form del nostro sito.

### semplice programma in Python per importare fatture elettroniche in excel

import os,glob
import xml.etree.ElementTree as ET

DatiFatture = []

###Qui indichiamo in coppie (tuple) il dato che ci serve e l’elemento all’interno del quale è contenuto.

StrutturaCampi = [
(‘CessionarioCommittente’,’Denominazione’),
(‘DatiGenerali’,’ImportoTotaleDocumento’),
(‘DatiPagamento’,’DataScadenzaPagamento’)
]

### Qui indichiamo la certella con i file XML da elaborare
path = “C:\\Users\\user\\Desktop\\FattureXML”

for filename in glob.glob(os.path.join(path, “*.xml”)):
tree = ET.parse(filename)
root = tree.getroot()

pre = False
i = 0
e = ET.ElementTree(tree)
for elt in e.iter():
if elt.tag == StrutturaCampi[i][0]:
pre = True
if elt.tag == StrutturaCampi[i][1] and pre:
DatiFatture.append((elt.tag,elt.text))
print ((“%s: ‘%s'”) % (elt.tag, elt.text))
pre = False
i= i +1
if i == len(StrutturaCampi):
i = 0

### Il file si chiamerà: export.csv e sarà nella stessa cartella di input
out_file = open(os.path.join(path, “export.csv”),”w”)

for NomeCampo in StrutturaCampi:
out_file.write(‘%s;’%(str(NomeCampo[1])))
out_file.write(‘\n’)

i = 0
for TupleValues in DatiFatture:
out_file.write(‘%s;’%(TupleValues[1]))
i = i +1
if i == len(StrutturaCampi):
i = 0
out_file.write(‘\n’)

out_file.close()

Per chi fosse interessato ho pubblicato qui un modo per leggere le righe di dettaglio della fattura utilizzando la libreria xmltodict.








Comments (13)

  1. Buongiorno,
    ho provato ad utilizzare la routine aggiornando solo il percorso file ma senza successo.
    Mi spiego. Ho messo in una stessa cartella due file XML di input e il csv di output.
    La prima riga del CSV viene correttamente inizializzata con in nomi dei campi (io ne ho aggiunto un ulteriore che è presente in uno dei due file xml) a riprova questa che il percorso è corretto.
    La routine però non sembranon entrare nel ciclo, come se non trovasse i file XML di input.
    Ho messo un “print” tra le istruzioni che seguono che però non viene eseguito, in consolle non appare niente.
    pre = False
    i = 0
    e = ET.ElementTree(tree)
    print (“sono passato di qua”)

    Può darmi una mano
    Grazie
    Francesco

    • Buongiorno Francesco, ho visto solo ora il commento!
      Se ha ancora la necessita posti pure il codice completo con il percorso e nomefile che ha utilizzato.

      • ### semplice programma in Python per importare fatture elettroniche in excel

        import os,glob
        import xml.etree.ElementTree as ET

        DatiFatture = []

        ###Qui indichiamo in coppie (tuple) il dato che ci serve e l’elemento all’interno del quale è contenuto.

        StrutturaCampi = [
        (‘CessionarioCommittente’,’Denominazione’),
        (‘DatiGenerali’,’ImportoTotaleDocumento’),
        (‘DatiPagamento’,’DataScadenzaPagamento’),
        (‘ns3:MetadatiInvioFile’,’IdentificativoSdI’)
        ]

        ### Qui indichiamo la certella con i file XML da elaborare

        path = “C:\\Users\\Imma\\Desktop\\ProvaXML\\FattureXML”

        ### Istruzioni per il DEBUG
        ### import pdb
        ### pdb.set_trace ()

        for filename in glob.glob(os.path.join(path, “*.xml”)):
        tree = ET.parse(filename)
        root = tree.getroot()

        pre = False
        i = 0
        e = ET.ElementTree(tree)
        print (“sono passato di qua”)
        for elt in e.iter():
        if elt.tag == StrutturaCampi[i][0]:
        print (“sono passato di qua2”)
        pre = True
        if elt.tag == StrutturaCampi[i][1] and pre:
        DatiFatture.append((elt.tag,elt.text))
        print ((“%s: ‘%s'”) % (elt.tag, elt.text))
        pre = False
        i= i +1
        print (i)
        if i == len(StrutturaCampi):
        i = 0

        ### Il file si chiamerà: export.csv e sarà nella stessa cartella di input
        out_file = open(os.path.join(path, “export.csv”),”w”)

        for NomeCampo in StrutturaCampi:
        out_file.write(‘%s;’%(str(NomeCampo[1])))
        out_file.write(‘\n’)

        i = 0
        for TupleValues in DatiFatture:
        out_file.write(‘%s;’%(TupleValues[1]))
        i = i +1
        if i == len(StrutturaCampi):
        i = 0
        out_file.write(‘\n’)

        out_file.close()

        QUESTO INVECE IL FILE XML DI INPUT

        108700191

        IT00514610559_70.xml.p7m

        9BTGYX

        FPA12

        1

        916674989

  2. Ciao, ma volendo leggere tutte le voci dei vari articoli che compongono la fattura, con i loro prezzi e iva, per poter fare dei conti in excel in un secondo momento, come devo modificare il codice?
    grazie mille

    • Principalmente bisogna aggiungere i campi alla lista:

      StrutturaCampi = [
      (‘CessionarioCommittente’,’Denominazione’),
      (‘DatiGenerali’,’ImportoTotaleDocumento’),
      (‘DatiPagamento’,’DataScadenzaPagamento’)
      ]

      Però per i campi di dettaglio righe fattura è necessario fare un altro sotto ciclo che scorra le righe che la compongono fino alla fine.

      Se riesco nei prossimi giorni carico un esempio.A presto!

    • Si effettivamente poter esportare tutte le righe delle fatture a excel da un gruppo di xml sarebbe fantastico in modo da avere per ogni riga: codice cliente/partivaiva/cod.fiscale, nome cliente, n. fattura , data fattura, cod. articolo, descrizione articolo, quantità, prezzo, sconto, lotto

  3. Ma legge anche i files firmati p7m ?

  4. Per chi fosse interessato ho pubblicato qui un modo per leggere le righe con la libreia xmltodict:
    https://robertozanardo.com/blog/2020/08/13/leggere-dettaglio-linee-da-fatture-elettroniche-con-xmltodict/

  5. mi potete aiutare per favore
    non estrae nulla..

    ### semplice programma in Python per importare fatture elettroniche in excel
    import os,glob
    import xml.etree.ElementTree as ET

    DatiFatture = []

    ###Qui indichiamo in coppie (tuple) il dato che ci serve e l’elemento all’interno del quale è contenuto.

    StrutturaCampi = [
    (‘CessionarioCommittente’,’Denominazione’),
    (‘DatiGenerali’,’ImportoTotaleDocumento’),
    (‘DatiPagamento’,’DataScadenzaPagamento’)
    ]

    ### Qui indichiamo la certella con i file XML da elaborare
    path = “C:\\Python\\FattureXML\\”

    for filename in glob.glob(os.path.join(path, “*.xml”)):
    tree = ET.parse(filename)
    root = tree.getroot()

    pre = False
    i = 0
    e = ET.ElementTree(tree)
    for elt in e.iter():
    if elt.tag == StrutturaCampi[i][0]:
    pre = True
    if elt.tag == StrutturaCampi[i][1] and pre:
    DatiFatture.append((elt.tag,elt.text))
    print ((“%s: ‘%s'”) % (elt.tag, elt.text))
    pre = False
    i= i +1
    if i == len(StrutturaCampi):
    i = 0

    ### Il file si chiamerà: export.csv e sarà nella stessa cartella di input
    out_file = open(os.path.join(path, “export.csv”),”w”)

    for NomeCampo in StrutturaCampi:
    out_file.write(‘%s;’%(str(NomeCampo[1])))
    out_file.write(‘\n’)

    i = 0
    for TupleValues in DatiFatture:
    out_file.write(‘%s;’%(TupleValues[1]))
    i = i +1
    if i == len(StrutturaCampi):
    i = 0
    out_file.write(‘\n’)

    out_file.close()

    cosa sbaglio?
    grazie

Comment here