Uno dei punti di forza di Jasper Reports è di essere in grado di utilizzare dati che gli vengono forniti in maniera “agnostica”, ovvero senza dover conoscere troppi dettagli sulla loro provenienza: query SQL, Collection di oggetti Java, file CSV, addirittura query Hibernate o JPA, tutto è lecito basta che i dati possano in qualche modo essere organizzati in righe e colonne. Insomma possiamo dire Jasper Reports vede il mondo come se fosse un grosso database!
In questo appuntamento vediamo come caricare dati da file CSV (Comma-Separated Values) creati con OpenOffice o Excel.
Prepariamo i dati
Per prima cosa creiamo un foglio di calcolo; nel nostro esempio utilizzeremo OpenOffice Calc per diversi motivi: è gratuito, gira su diverse piattaforme e ha un ottimo supporto per l’export CSV. Anche Microsoft Excel ha funzioni di export in formato CSV del tutto simili, basterà quindi utilizzare le stesse impostazioni di formato per ottenere gli stessi risultati.
Apriamo un nuovo foglio di calcolo e aggiungiamo queste intestazioni: ID_CLIENTE, CLIENTE, ID_ORDINE, DATA_ORDINE, IMPORTO_ORDINE.
Per facilitare l’utilizzo del file suggeriamo di impostare queste formattazioni:
- formato intestazione sulla prima riga (Heading per le versioni in lingua inglese);
- formato testo per le colonne ID_CLIENTE CLIENTE ID_ORDINE. In questo modo i codici alfanumerici non verranno interpretati erroneamente come numeri, ad esempio scartando eventuali zeri iniziali;
- formato data per la colonna DATA_ORDINE, specificando questo formato: GG/MM/AAAA (o l’equivalente in inglese). Questa specifica di formato sarà importantissima nella fase di import in Jasper Reports, per cui annotiamocela perché ci tornerà utile in seguito;
- per la colonna IMPORTO_ORDINE (e per le colonne di tipo monetario in genere) consigliamo di utilizzare il formato numerico e di specificare la lingua inglese. In questo modo verrà utilizzato il carattere punto per separare i decimali, praticamente lo standard de facto per l’interscambio di dati informatici.
Aggiungiamo alcune righe di dati (sbizzarrendoci pure con valori di fantasia), e salviamo il file, nel formato nativo del foglio di calcolo, che nel caso di OpenOffice è un file con estensione .ods mentre per Excel ha estensione .xls. Avere il file in questo formato presenta diversi vantaggi:
- viene conservata la formattazione delle celle, per facilitare il lavoro a chi lavora sul file;
- è possibile utilizzare formule;
- è possibile utilizzare funzioni avanzate dei fogli di calcolo come il controllo di validità dei dati inseriti, macro, ecc.
Una volta salvato il foglio di calcolo possiamo passare all’esportazione in CSV (procedura per OpenOffice Calc):
- andare nel menu File -> salva come…;
- scegliere il formato Text CSV (.csv);
- eventualmente modificare il nome del file: il valore di default è il nome del file .ods di partenza, ma con estensione .csv;
- cliccare su salva
- nella finestra di dialogo scegliere il character set Unicode (UTF-8), il delimitatore di campo {Tab} e il delimitatore di testo “
Se apriamo il file .csv così creato tramite un editor di testo avremo qualcosa di simile:
"ID_CLIENTE" "CLIENTE" "ID_ORDINE" "DATA_ORDINE" "IMPORTO_ORDINE" "1" "Bababa spa" "1" 01/01/2010 100.00 "2" "abbracadabbra" "2" 02/01/2010 150.00 "3" "asdad" "3" 03/01/2010 90.00 "4" "asdasd" "4" 04/01/2010 25.00 [...]
Creiamo il report
Abbiamo già visto come creare un report di base in un articolo precedente, in questo caso dobbiamo seguire una procedura molto simile, con queste differenze:
- nella pagina query del wizard dovremo cliccare sul pulsante Nuovo;
- scegliere il tipo di sorgente dati file CSV datasource;
- nel tab Separators scegliere Tab come field separator;
- nel tab Columns cliccare su Get column name from the first row of the file;
- selezionare la casella use custom data format e impostare lo stesso formato utilizzato nel foglio di calcolo:
dd/MM/yyyy
- cliccare su Salva.
Il resto del wizard si completa come abbiamo già visto, e il risultato sarà che il report verrà aggiornato automaticamente ogni volta che esporteremo i dati sul file CSV!
Sviluppi
Nel “mondo reale” capita spesso di ricevere grossi (a volte enormi!) file in formato CSV, e di dover preparare delle analisi di questi dati da presentare ai propri colleghi. Jasper Reports e iReport utilizzati insieme ci consentono di automatizzare questo processo senza scrivere una riga di codice, ovviamente a patto che il formato di questi file CSV sia stabile fra un invio e l’altro…
Fra qualche appuntamento saremo pronti per installare Jasper Reports come libreria in applicazioni Java, questo ci permetterà di automatizzare ancora meglio la fase di produzione dei documenti, utilizzando iReport solo per la creazione dei template.