sabato 27 aprile 2019

.Net generazione di un file Excel da un file di testo tramite Filehelpers VB.Net e C#

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_filehelpers-generazione-di-un-file-excel_1613.aspx

Riprendiamo l’articolo precedente https://www.iprogrammatori.it/articoli/programmazione/art_net-la-gestione-dei-file-testo-con-fileh_1611.aspx nel quale abbiamo visto come utilizzare la libreria gratuita Filehelpers per estrapolare i dati da file di testo in base ad una lunghezza, mappando le varie righe, con le proprietà di una classe.
In questo modo, anche la gestione e manipolazione dei dati diventa semplice, inoltre la libreria risulta di buona qualità in ambito di prestazioni.
In questo articolo vedremo il relativo utilizzo con la generazione dei file Excel.

Creazione del progetto

Riprendendo il progetto precedente o nel creare uno nuovo, si aggiunge un pulsante nella form per l’applicazione di tipo “Windows Application”.
Riportiamo il file di testo come quello precedente qui di seguito.
Nome           Cognome         Ruolo
Emanuele      Mattei               Analista
Luigi              Cristaldi           Amministratore Delegato
Olga              Foti                 Responsabile del personale
Fine tracciato

A questo punto aggiungiamo la libreria “FileHelpers” in modo che possiamo manipolare i dati nel file di testo, e questo lo abbiamo spiegato nell’articolo precedente.
Ora non ci resta che aggiunge altra libreria di FileHelpers in particolare quella per la gestione dei file “Excel”.
Tramite nuget aggiungiamo la libreria “FileHelpers.ExcelNPOIStorage”.
Se scriviamo nella casella di ricerca “FileHelpers” sarà visibile nei risultati, come si vede in figura 1.



Figura 1 – L’installazione del componente FileHelpers per Excel

A questo punto una volta installato passiamo alla stesura del codice.
Si crea una classe per la gestione del file Excel, che abbiamo visto nel precedente articolo, con le tre proprietà che sono nome, cognome e ruolo.
Qui di seguito si riporta l’esempio completo di codice, per entrambi i linguaggi, anche se non entreremo nel dettaglio.


VB.Net

<FixedLengthRecord()>

Public Class FileTesto

    <FieldFixedLength(20)>

    Public Nome As String

    <FieldFixedLength(16)>

    Public Cognome As String

    <FieldFixedLength(29)>

    Public Ruolo As String

End Class
 

C#
   public  class FileTesto

    {

       [FieldFixedLength(20)]

       public string Nome;

 

       [FieldFixedLength(16)]

       public string Cognome;

 

       [FieldFixedLength(29)]

       public string Ruolo;

    }




Passiamo alla nostra form, ed aggiungiamo lo spazio dei nomi relativo a questa libreria che abbiamo appena aggiunto al progetto.


 

VB.Net

Imports FileHelpers.ExcelNPOIStorage


C#

using FileHelpers.ExcelNPOIStorage;


Ora facciamo doppio click sul pulsante in modo che si passa in visualizzazione codice per l’evento Click del pulsante.
Nell’evento, dobbiamo estrapolare i dati dal file di testo, e questo lo abbiamo visto nel precedente articolo e poi tramite le classi “ExcelNPOIStorage” andremo a generare il file Excel.
Qui di seguito si riporta il frammento di codice per l’evento click per entrambi i linguaggi.



VB.Net

Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click

        Try

            Dim engineLeggiFile = New FixedFileEngine(Of FileTesto)()

            engineLeggiFile.Options.IgnoreFirstLines = 1

            engineLeggiFile.Options.IgnoreLastLines = 1

            Dim letturaFile As FileTesto() = engineLeggiFile.ReadFile(Environment.CurrentDirectory & "\FileDaElaborare.txt")

            If engineLeggiFile.ErrorManager.ErrorCount > 0 Then engineLeggiFile.ErrorManager.SaveErrors("Errore.txt")

            Dim excelStorage As ExcelNPOIStorage = New ExcelNPOIStorage(GetType(FileTesto))

            excelStorage.FileName = "Prova.xlsx"

            excelStorage.StartColumn = 0

            excelStorage.StartRow = 0

            excelStorage.HeaderRows = 3

            excelStorage.OverrideFile = True

            excelStorage.ColumnsHeaders.Add("Nome")

            excelStorage.ColumnsHeaders.Add("Cognome")

            excelStorage.ColumnsHeaders.Add("Ruolo")

            excelStorage.SheetName = "Nominativi"

            Dim listFileTesto As List(Of FileTesto) = New List(Of FileTesto)()

 

            For Each elemento In letturaFile

                Dim fileTesto As FileTesto = New FileTesto()

                fileTesto.Nome = elemento.Nome

                fileTesto.Cognome = elemento.Cognome

                fileTesto.Ruolo = elemento.Ruolo

                listFileTesto.Add(fileTesto)

            Next

 

            excelStorage.InsertRecords(listFileTesto.ToArray())

        Catch ex As Exception

            MessageBox.Show("Errore: " & ex.Message)

        End Try

    End Sub

 

C#

 

private void button1_Click(object sender, EventArgs e)

        {

            try

            {

 

         

            var engineLeggiFile = new FixedFileEngine<FileTesto>();

            //ignoro la prima ed ultima riga

            engineLeggiFile.Options.IgnoreFirstLines = 1;

            engineLeggiFile.Options.IgnoreLastLines = 1;

 

            //leggo il file

            FileTesto[] letturaFile = engineLeggiFile.ReadFile(Environment.CurrentDirectory + "\\FileDaElaborare.txt");

            if (engineLeggiFile.ErrorManager.ErrorCount > 0)

                engineLeggiFile.ErrorManager.SaveErrors("Errore.txt");

 

 

            ExcelNPOIStorage excelStorage = new ExcelNPOIStorage(typeof(FileTesto));

 

            excelStorage.FileName = "Prova.xlsx";

            excelStorage.StartColumn = 0;

            excelStorage.StartRow = 0;

            excelStorage.HeaderRows = 3;

            excelStorage.OverrideFile = true;

            excelStorage.ColumnsHeaders.Add("Nome");

            excelStorage.ColumnsHeaders.Add("Cognome");

            excelStorage.ColumnsHeaders.Add("Ruolo");

 

            excelStorage.SheetName = "Nominativi";

            List<FileTesto> listFileTesto = new List<FileTesto>();

 

            foreach (var elemento in letturaFile)

            {

                FileTesto fileTesto = new FileTesto();

                fileTesto.Nome = elemento.Nome;

                fileTesto.Cognome = elemento.Cognome;

                fileTesto.Ruolo = elemento.Ruolo;

                listFileTesto.Add(fileTesto);

 

 

            }

            excelStorage.InsertRecords(listFileTesto.ToArray());

            }

            catch (Exception ex)

            {

 

                MessageBox.Show("Errore: " + ex.Message);

            }

 

        }








Come si vede dal codice precedente, con la classe ExcelNPOISTorage, andiamo a gestire il file Excel, in particolare la proprietà “FileName” imposta il file, se non viene specificato il percorso, verrà generato nella stessa cartella in cui gira l’applicazione.
La proprietà StartClumn e StartRow, indicano da quale colonna e riga si deve scrivere, mentre la proprietà HeaderRows il numero delle intestazioni.
Impostando a true la proprietà “OverrideFile” il file verrà sovrascritto.
Con il metodo Add della proprietà ColumnHeaders invece aggiungiamo le intestazioni.
Ultima proprietà è “Sheetname” con il quale si imposta il nome del foglio.
Si crea un oggetto list della classe per la gestione del file, e poi ad ogni record del file di testo, si inserisce nella lista, che verrà aggiunto tramite il metodo InsertRecords, il quale genererà il file.

Conclusioni

L’articolo ha fornito le basi per utilizzare in maniera autonoma l’utilizzo della libreria di Filehelpers per la generazione di file Excel, con prestazioni di alta qualità.
La libreria molto facile da utilizzare, offre un valido strumento ai programmatori per realizzare programma nel quale necessitano la generazione di file di tipo Excel.

Nessun commento: