mercoledì 25 settembre 2019

Esportare un DataTable in un file Excel in VB.Net e C#

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_esportare-un-datatable-in-un-file-excel-_1640.aspx

In questo articolo vedremo come tramite i linguaggi di programmazione più usati, quali Visual Basic Net e C# in ambiente Windows Forms, possiamo esportare i dati presenti in una classe di tipo “DataTable” o meglio oggetto, in un file di Microsoft Excel, il tutto come mostrato in figura 1.

Figura 1 – il risultato dell’esportazione

I dati presenti nell’oggetto DataTable, saranno due colonne, denominate Nome e Cognome, con due righe, ma i dati possono essere anche molto di più.
Nell’esportazione inoltre verranno aggiunti anche le intestazioni di colonna, in questo caso con i nomi presenti nella proprietà “Name” dei vari oggetti “DataColumn” impostati quando si inizializza la classe.
I frammenti di codice si possono usare anche per l’ambiente “Web” quindi in Asp.Net.

Creazione del progetto

Si crea un nuovo progetto di tipo Windows Application, selezionando come modello “Desktop” tramite il linguaggio di proprio interesse.
Una volta creato il progetto, aggiungere un pulsante nella form, in modo che richiama la funzionalità di esportazione.
Terminata la parte di configurazione e grafica, passiamo alla parte relativa alla stesura del codice.
Scrittura del codice
Passiamo in visualizzazione codice della nostra form in modo da inserire lo spazio dei nomi per la gestione dei file e del testo.
In alto, sopra la dichiarazione della nostra classe form, inseriamo lo spazio dei nomi per gestire i file, qui di seguito tale dichiarazione per entrambi i linguaggi.



VB.Net

Imports System.IO

Imports System.Text

 

C#

using System.Text;

using System.IO;

Ora dobbiamo scrivere a livello di classe, in particolar modo dopo la dichiarazione di classe form, un oggetto a livello di form, quindi scriveremo un oggetto di tipo DataTable, sotto alla dichiarazione della form, scriviamo il seguente form per creare un oggetto a livello di form.



VB.Net

Public Class Form1

    Dim DttDati As New DataTable

C#

public partial class Form1 : Form

    {

        DataTable DttDati = new DataTable();

Ora nell’evento load della nostra form, dobbiamo scrivere il codice per valorizzare l’oggetto DataTable con due colonne e due righe. Le colonne saranno denominate rispettivamente, “Nome” e “Cognome” questa dichiarazione sarà anche usata per impostare le intestazioni di colonna nel file Excel.
Qui di seguito si riporta il frammento di codice di tali operazioni per i linguaggi di programmazione Visual Basic Net e C#



VB.Net

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Try

            Dim DtcNome As DataColumn = New DataColumn("Nome")

            Dim DtcCognome As DataColumn = New DataColumn("Cognome")

            DttDati.Columns.Add(DtcNome)

            DttDati.Columns.Add(DtcCognome)

            Dim Riga As DataRow = DttDati.NewRow()

            Riga("Nome") = "Emanuele"

            Riga("Cognome") = "Mattei"

            DttDati.Rows.Add(Riga)

            Riga = DttDati.NewRow()

            Riga("Nome") = "Luigi"

            Riga("Cognome") = "Cristaldi"

            DttDati.Rows.Add(Riga)

        Catch ex As Exception

            MessageBox.Show(ex.Message)

        End Try

    End Sub

 

C#

 

private void Form1_Load(object sender, EventArgs e)

        {

            try

            {

                DataColumn DtcNome = new DataColumn("Nome");

                DataColumn DtcCognome = new DataColumn("Cognome");

                DttDati.Columns.Add(DtcNome);

                DttDati.Columns.Add(DtcCognome);

                DataRow Riga = DttDati.NewRow();

                Riga["Nome"] = "Emanuele";

                Riga["Cognome"] = "Mattei";

                DttDati.Rows.Add(Riga);

                  Riga = DttDati.NewRow();

                  Riga["Nome"] = "Luigi";

                  Riga["Cognome"] = "Cristaldi";

                  DttDati.Rows.Add(Riga);

 

            }

            catch (Exception ex)

            {

                 MessageBox.Show(ex.Message);

            }

        }


Ora dobbiamo passare in visualizzazione codice, facciamo doppio click sul pulsante, in modo che viene creato il codice per l’evento click del pulsante e ci viene visualizzata la modalità codice.
Il codice dell’evento click del pulsante, permetterà di selezionare tutti nomi di colonne, per impostare in un oggetto di tipo “StringBuilder” le intestazioni di colonne nel file Excel che verrà generato, mentre tramite l’enumerazione della proprietà “Rows” del DataTable verrà effettuato un ciclo su tutti i record presenti nella DataTable.
Il tutto sarà utilizzato con le istruzioni “Select”, mentre la classe “SaveFileDialog” ci permetterà di selezionare sul pc, il percorso e nome del file da attribuire al file “Excel.
Qui di seguito si riporta l’evento click del pulsante esportazione dei dati in Microsoft Excel, per entrambi i linguaggi.



VB.Net

Private Sub BtnEsportaDtt_Click(sender As Object, e As EventArgs) Handles BtnEsportaDtt.Click

        Try

 

     

        Dim DttDatiEsporta As DataTable = DttDati

        Dim sb As StringBuilder = New StringBuilder()

        Dim NomiColonne As IEnumerable(Of String) = DttDatiEsporta.Columns.Cast(Of DataColumn)().[Select](Function(column) column.ColumnName)

        sb.AppendLine(String.Join(";", NomiColonne))

 

        For Each row As DataRow In DttDatiEsporta.Rows

            Dim Elementi As IEnumerable(Of String) = row.ItemArray.[Select](Function(elemento) elemento.ToString())

            sb.AppendLine(String.Join(";", Elementi))

        Next

 

        Dim salvaFile As SaveFileDialog = New SaveFileDialog()

        salvaFile.Filter = "File Excel(.csv)|*.csv"

        salvaFile.Title = "Salva file sul pc"

        salvaFile.CheckPathExists = True

        salvaFile.FileName = "EsportaDati.csv"

        salvaFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

 

        If salvaFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then

            File.WriteAllText(salvaFile.FileName, sb.ToString())

            MessageBox.Show("File salvato Correttamente")

            End If

        Catch ex As Exception

            MessageBox.Show(ex.Message)

        End Try

    End Sub

 

 

C#

 

   private void BtnEsportaDtt_Click(object sender, EventArgs e)

        {

 

            try

            {

 

         

            DataTable DttDatiEsporta = DttDati;             

 

 

            StringBuilder sb = new StringBuilder();

 

            IEnumerable<string> NomiColonne = DttDatiEsporta.Columns.Cast<DataColumn>().

                                              Select(column => column.ColumnName);

            sb.AppendLine(string.Join(";", NomiColonne));

 

            foreach (DataRow row in DttDatiEsporta.Rows)

            {

                IEnumerable<string> Elementi = row.ItemArray.Select(elemento => elemento.ToString());

                sb.AppendLine(string.Join(";", Elementi));

            }

 

            SaveFileDialog salvaFile = new SaveFileDialog();

            salvaFile.Filter = "File Excel(.csv)|*.csv";

            salvaFile.Title = "Salva file sul pc";

            salvaFile.CheckPathExists = true;

 

            salvaFile.FileName = "EsportaDati.csv";

            salvaFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

            if (salvaFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)

            {

 

 

                File.WriteAllText(salvaFile.FileName, sb.ToString());

                 MessageBox.Show("File salvato Correttamente");

 

            }

            }

            catch (Exception)

            {

                MessageBox.Show(ex.Message);

            }

        }




Conclusioni

Ora non ci resta che testare il nostro applicativo, eseguendolo. Questa tecnica ha fornito al lettore un modo di come esportare i dati presenti in un DataTable, oppure se questi dati sono presenti in un controllo DatagridView o GridView (per i controllo web) basterà effettuare la conversione della proprietà “DataSource” del controllo in un DataTable, in un file Microsoft Excel.
Tecnica che può tornare utile quando si vuole dare un prospetto della propria gestione dei dati, in altri formati ma soprattutto da inviare e trasferire ad altri utenti.
Una funzionalità che tornerà utile a chi sviluppa applicazioni gestionali.

Nessun commento: