Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-la-gestione-del-file-microsoft-excel-365-co_1805.aspx
In questo articolo vedremo come gestire un file di tipo Microsoft Excel 365 o 2016 tramite la tecnologia .Net versione 6, con il linguaggio di programmazione C# e l’ambiente di sviluppo Visual Studio 2022 Community, che è attualmente l’ultima versione nel momento in cui si sta scrivendo l’articolo.
Vedremo come in un progetto di tipo “Windows App”, ma le operazioni di lettura, scrittura e modifica dei dati, si possono fare anche per l’ambiente web, apportando alcuni accorgimenti per la gestione delle classi, ma il frammento di codice per gestire i dati è valido per tutti gli ambienti.
Creazione del file Excel e del progetto:
Si crea un nuovo file di tipo Excel 2016 o 365, inserendo come titoli di intestazione nella colonna “A1” il valore “Nome”, e per la cella “A2” il valore “Cognome”, il tutto come mostrato in figura 1.
Figura 1 – Le intestazioni del file Excel
Salviamo il file in una cartella del nostro pc, con privilegi di lettura e scrittura.
Apriamo Visual Studio 2022 Community o versione successive, e si crea un nuovo progetto di tipo “App Windows Forms” , facciamo click sul pulsante “Avanti” impostiamo un nome e nell’ultima finestra, selezioniamo come versione la 6.
Inseriamo nella form un controllo di tipo DatagridView, che avrà impostato la proprietà “Name” in DtgDati, e la proprietà “Dock” in “Top” , due label, che avranno la proprietà “Text” impostato rispettivamente su “Nome” e su “Cognome”, due controlli di tipo “TextBox”, con la proprietà “Name” impostata una su “TxtNome” e l’altra su “TxtCognome”, tre pulsanti, uno con la proprietà “Name” impostata su “BtnInserisci” e la proprietà “Text” con il valore “Inserisci”, un pulsante con la proprietà “Name” impostata su “BtnModifica” e la proprietà “Text” con il valore “Modifica”, il tutto come mostrato in figura 2.
Figura 2 – La form con i vari controlli
Stesura del codice
Ora non resta che scrivere il codice per la gestione dei dati per il file Excel, passiamo in visualizzazione codice, ed in alto sopra ad ogni riga di codice, dobbiamo inserire lo spazio dei nomi per la gestione dei dati, che è “OleDB”.
Sopra, nella parte dello spazio dei nomi, inseriamo le seguente istruzioni di codice.
C#
using System.Data;
using System.Data.OleDb;
Può darsi che l’ambiente di sviluppo ci chiede di intarlarli tramite “NuGet”.
Fatto ciò, nella classe, form, scriviamo il codice per la lettura dei dati, un metodo che verrà richiamato nell’evento click dei pulsanti e nell’evento load della form.
Di seguito il frammento del codice per la lettura dei dati del file Excel, utilizzando le classi dello spazio dei nomi “OleDB”, in particolare la classe OleDbAdapter, che permette di eseguire le query, OleDbConnection per effettuare il collegamento al file “Excel”, ed una classe “DataSet” per la gestione dei dati.
C#
private void CaricaDati()
{
string Connessione = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data
Source='" + @"C:\varie\FileExcel.xlsx" +
"';Extended
Properties=\"Excel 12.0;HDR=YES;\"";
using
(OleDbConnection conn = new OleDbConnection(Connessione))
{
try
{
conn.Open();
OleDbDataAdapter DataAdapterQuery = new System.Data.OleDb.OleDbDataAdapter("SELECT
* FROM[Foglio1$]", conn);
DataSet DtsDati = new DataSet();
DataAdapterQuery.Fill(DtsDati);
DtgDati.DataSource = DtsDati.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
}
}
Passiamo in visualizzazione grafica, e facciamo doppio click in un qualunque punto della form, in modo che visualizza l’evento Load della form, con il quale richiamare la funzione appena creata.
Di seguito il frammento di codice delle suddette operazioni.
C#
private void Form1_Load(object sender, EventArgs e)
{
CaricaDati();
}
Ora se proveremo ad eseguire la nostra applicazione, verrà visualizzato la griglia senza dati, in quanto al momento non sono presenti dati nel file Excel.
Passiamo in visualizzazione grafica, e facciamo doppio click sul pulsante con la dicitura “Inserisci” o il nome che avete assegnato per l’inserimento dei dati. Verrà visualizzata la parte codice dell’evento click del pulsante.
In questo caso, per l’inserimento dei dati, utilizzeremo le classi per la gestione delle operazioni di inserimento, che sono OleDbComand, passando l’istruzione SQL di insert.
Come si è visto anche nel precedente frammento di codice, il file “Excel” può essere considerato come un database, e quindi eseguire le normali istruzioni CRUD, lettura, inserimento e modifica dei dati, mentre per la cancellazione, non è possibile.
C#
private void BtnInserisci_Click(object sender, EventArgs e)
{
string Connessione = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data
Source='" + @"C:\varie\FileExcel.xlsx" +
"';Extended
Properties=\"Excel 12.0;HDR=YES;\"";
using
(OleDbConnection conn = new OleDbConnection(Connessione))
{
try
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = @"Insert into [Foglio1$] (Nome,Cognome)
VALUES ('"+TxtNome.Text+"','"+TxtCognome.Text+"');";
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
conn.Dispose();
CaricaDati();
}
}
}
La modifica dei dati è la stessa per l’inserimento, ma con la differenza che occorre cambiare la sintassi SQL, utilizzano il comando universale Update.
Passando in visualizzazione grafica, facciamo doppio click sul pulsante “Modifica” o a seconda del testo che ha impostato il lettore, e nell’evento click del pulsante, modificare la sintassi precedente con il comando Update.
Di seguito il frammento di codice delle suddette operazioni.
C#
private void BtnModifica_Click(object sender, EventArgs e)
{
string Connessione = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data
Source='" + @"C:\varie\FileExcel.xlsx" +
"';Extended
Properties=\"Excel 12.0;HDR=YES;\"";
using
(OleDbConnection conn = new OleDbConnection(Connessione))
{
try
{
if
(DtgDati.SelectedCells.Count<2)
{
MessageBox.Show("Selezionare una riga");
return;
}
string Nome =
DtgDati.SelectedCells[0].Value.ToString();
string Cognome =
DtgDati.SelectedCells[1].Value.ToString();
conn.Open();
OleDbCommand cmdUpdate = new OleDbCommand();
cmdUpdate.Connection = conn;
cmdUpdate.CommandText = @"UPDATE [Foglio1$] SET Nome = '" + TxtNome.Text
+ "',
Cognome='" + TxtCognome.Text + "' WHERE NOME = '"+ Nome + "' and
Cognome='" + Cognome + "';" ;
cmdUpdate.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
conn.Dispose();
CaricaDati();
}
}
}
Conclusioni
L’articolo ha voluto fornire al lettore, la conoscenza per l’utilizzo dei file “Excel” come database, con il nuovo framework .Net versione 6, e di come tramite le classi OleDB, si possono eseguire le operazioni più comuni che si fanno con altri database.
Può capitare di utilizzare nelle proprie applicazioni file Excel, inserendoli nel proprio progetto come modelli per poi generarli con i dati fornendo all’utente finale una tipologia di informazioni e dati.