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.