VSTO Excel realizzare un componente per generare un file da due file

In questo articolo vedremo come creare un file Excel, estrapolando i dati da due distinti file di Microsoft Excel 2016.
L'articolo vuole fornire una tecnica o meglio una procedura, che permette di generare un file Excel con i dati presenti in due file Excel distinti.
Una procedura che sarà attivabile tramite componente aggiuntivo realizzato con VSTO e linguaggio di programmazione C# e VB.Net.

Creazione dei file


Prima di tutto bisogna creare due file Excel, con una colonna che presenti un codice ID per identificare la singola riga.
In questo modo, in base alla colonna identificativa possiamo creare in un file il record comprendente i valori dei singoli record per i due file.
Ma scriviamo adesso il nostro primo file, che chiameremo “FileA.xlsx” nella prima colonna in A1 mettiamo ID in B1 Nome e C1 Cognome, che sono le intestazioni delle colonne. Inseriamo un numero progressivo per ogni riga (ne bastano tre) per la colonna ID e per la colonna nome e cognome, inseriamo dei nostri valori.
Qui di seguito un esempio per il nostro articolo
ID Nome Cognome
1 Marco Aurelio
2 Gianni Bianchi
3 Emanuele Mattei


Ora non ci resta che salvare il file, con il nome “FileA” .

Si crea un secondo file Excel, che chiameremo “FileB.xlsx” e nella colonna A1 impostiamo come valore ID, mentre nella cella B1 impostiamo il valore “citta” e nella cella C1 impostiamo il valore telefono.
Nelle righe sottostanti, per la colonna ID dobbiamo mettere gli stessi valori che abbiamo inserito nel fileA, mentre per la colonna citta e telefono impostiamo dei nostri valori.
Il file di esempio sarà come quello qui di seguito
ID Citta Telefono
1 Roma 3398456321
2 Milano 339187441
3 Mantova 3391980065

A questo punto salviamo il file con il nome “FileB.xlsx”.

Creazione del progetto


A questo punto dobbiamo creare un nuovo progetto di tipo “Componente aggiuntivo per Excel 2016” utilizzando il linguaggio di programmazione di proprio interesse.
In riferimento alla versione di Visual Studio installata, possiamo visualizzare la versione di office 2016 o 2013, l’articolo va bene per tutte le versioni.
Confermate il tutto dopo aver impostato il nome e percorso del progetto
Abbiamo visto in altri articoli precedenti, qui https://www.iprogrammatori.it/articoli/programmazione/art_vsto-creazione-componente-per-outlook-20_1565.aspx la creazione del pulsante nella barra di office, che in questo articolo non verrà descritta.

Stesura del codice


Dopo aver impostato il codice per la creazione dei pulsanti, aggiungiamo un form al  nostro progetto.
Da esplora soluzione, selezioniamo il nostro progetto e facciamo tasto destra, e dal menu che viene visualizzato facciamo click su “Windows Form”.
Nella creazione della form, aggiungiamo tre controlli label, tre controlli textbox ed un pulsante, in modo che ogni Cassella avrà il compito di visualizzare nella textbox il percorso e nome del file Excel, mentre nell’ultima casella, il percorso e nome del file che verrà generato.
Il tutto come verrà visualizzato in figura 1.

Figura 1 – La form per la generazione del file Excel da due esistenti

Come si vede nella figura le prime due caselle riguardano i file Excel nel quale andremo a rilevare i dati, e che in precedenza abbiamo chiamato FileA e FileB.
Mentre nella casella di testo in basso, il percorso e nome del file che verrà generato.
I pulsanti, posti alla fine di ogni casella, avranno il compito di aprire una finestra di dialogo e selezionare i vari file Excel per il rilevamento dei dati. Facciamo doppio click sul primo pulsante in alto a destra, quello con i tre pulsanti posto alla fine della casella con la label “Filea”.
Nell’evento click scriviamo il seguente codice.

VB.Net
Try
Dim selezionaFile As New OpenFileDialog
selezionaFile.Title = "Seleziona il file A da caricare i dati"
selezionaFile.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx"
selezionaFile.DefaultExt = "xls|xlsx"
If selezionaFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
txtFileA.Text = selezionaFile.FileName
End If
Catch ex As Exception
MessaggioErrore(ex.Message)
End Try
C#
try
{
OpenFileDialog selezionaFile = new OpenFileDialog();
selezionaFile.Title = "Seleziona il file A da caricare i dati";
selezionaFile.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx";
selezionaFile.DefaultExt = "xls|xlsx";
if (selezionaFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
txtFileA.Text = selezionaFile.FileName;
}
}
catch (Exception ex)
{
MessaggioErrore(ex.Message);
}

Come si vede dal codice, precedente, verrà aperta una finestra di dialogo per selezionare il file da estrapolare i dati. A questo punto passiamo in visualizzazione grafica e facciamo doppio click, sul pulsante posto alla fine della casella che viene indicata come File B.
In visualizzazione codice, nell’evento click, scriviamo il seguente codice che permette di selezionare il file, quello denominato FileB.

VB.Net
Try
Dim selezionaFile As New OpenFileDialog()
selezionaFile.Title = "Seleziona il file B da caricare i dati"
selezionaFile.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx"
selezionaFile.DefaultExt = "xls|xlsx"
If selezionaFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
txtFileB.Text = selezionaFile.FileName
End If
Catch ex As Exception
MessaggioErrore(ex.Message)
End Try
C#
try
{
OpenFileDialog selezionaFile = new OpenFileDialog();
selezionaFile.Title = "Seleziona il file B da caricare i dati";
selezionaFile.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx";
selezionaFile.DefaultExt = "xls|xlsx";
if (selezionaFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
txtFileB.Text = selezionaFile.FileName;
}
}
catch (Exception ex)
{
MessaggioErrore(ex.Message);
}

Ora non ci resta che passare di nuovo in visualizzazione grafica per selezionare l’ultimo pulsante, quello posto alla fine della casella di testo contraddistinta con l’etichetta “Nome nuovo file”.
In questo caso, andremo ad utilizzare la classe per la gestione delle finestre di dialogo per il salvataggio, in modo da impostare il percorso e nome del file.
Qui di seguito il frammento di codice per entrambi i linguaggi.

VB.Net
Try
Dim selezionaFile As New SaveFileDialog()
selezionaFile.Title = "Seleziona il file da creare"
selezionaFile.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx"
selezionaFile.DefaultExt = "xls|xlsx"
If selezionaFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
txtNuovoFile.Text = selezionaFile.FileName
End If
Catch ex As Exception
MessaggioErrore(ex.Message)
End Try
C#
try
{
SaveFileDialog selezionaFile = new SaveFileDialog();
selezionaFile.Title = "Seleziona il file da creare";
selezionaFile.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx";
selezionaFile.DefaultExt = "xls|xlsx";
if (selezionaFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
txtNuovoFile.Text = selezionaFile.FileName;
}
}
catch (Exception ex)
{
MessaggioErrore(ex.Message);
}

Termina qui la prima parte dell’articolo, nel successivo articolo andremo a vedere il codice da scrivere per il rilevamento dei dati, e soprattutto la generazione di un solo file con i dati presenti negli altri file Microsoft Excel.

Conclusioni


L’articolo ha fornito le nozioni per la creazione di un programma, che può essere esteso sulla gestione dei dati presenti in più file. In questa prima parte riguardante la creazione di un componente per Excel per la generazione di un file Excel, rilevando i dati da due file Excel.
Nel prossimo articolo, verrà illustrato il codice per la lettura dei dati, e l’inserimento in quello presente.