Excel - C# ed Excel ? - C# ed Excel ! - Parte 1

Livello tecnico : Intermedio

Riepilogo
Prima o poi (comunque presto e/o fin da ora) chi si occupa di automatizzare/gestire i file di Excel (di Office in generale) avrà a che fare con altri linguaggi di programmazione: JavaScript, HTML, CSS, C#, ecc. Questo è il primo di una serie di semplici articoli che vogliono aiutare chi viene dal VBA a scoprire questo *nuovo mondo* e iniziamo con il linguaggio C#.
Dettagli

Come scritto nel riepilogo, gli articoli hanno un taglio semplice (e spero pratico) e per gli approfondimenti consiglio di postare eventuali domande nella Community MSDN:

1) Cosa serve per iniziare.

Come prima cosa scaricare ed installare Visual Studio Community 2015 da qui:

Il tool di programmazione è gratuito ed è veramente completo permettendo di creare programmi complessi.

Il download e l'installazione possono richiedere diverso tempo, quindi armatevi di pazienza.

2) Ho installato, voglio subito cominciare!

Bene, come scritto in precedenza semplificherò al massimo le operazioni per creare subito la nostra prima applicazione C#.

Lanciamo Visual Studio (d'ora in poi VS) e quindi andiamo a selezionare in alto a sx File-->New-->Project:

Nella finestra che compare, selezionate: Visual C#-->Windows-->Console Application:

Qui non tratteremo il linguaggio C# e le funzionalità di VS lasciandovi liberi per questo di scegliere libri/tutorial/altro. Vi basti sapere che una Applicazione Console non utilizza Form o Windows e che in questo caso specifico ci serve solo come base per l'eseguibile che lancerà il nostro Excel.

Tornando alla nostra finestra, nella parte bassa possiamo decidere il nome da dare all'applicazione e la sua path.

A questo punto ci viene mostrato il modulo nel quale inserire il codice:

Lo so che tutto è molto diverso dall'editor del VBA, ma niente paura per quelle parentesi graffe! ;-)

C# non ne sa nulla delle librerie di Excel e quindi dobbiamo mettere un riferimento alle librerie. Più o meno quello che si fa anche in VBA quando abbiamo la necessità di mettere riferimenti a librerie che non fanno parte di Excel.

Selezioniamo Project-->Add Reference...:

Quindi in COM-->Type Libraries  selezioniamo Microsoft Excel nn.n Object Library, dove nn.n saranno la versione di Excel presente sulla macchina. Nell'immagine qui sotto potete vedere le due versioni installate sulla macchina che sto utilizzando:

Ultimo passaggio prima di iniziare a scrivere codice, aggiungiamo due *using* (indicati dalla freccia nell'immagine qui sotto) alle nostre dichiarazioni in testa al modulo, in modo che si presentino così:

Fatto questo vediamo come creare un file di Excel e come utilizzarne le librerie. Più che le parole, il codice d'esempio commentato:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Creo un nuovo oggetto Excel.Application
            Excel.Application xls = new Excel.Application();
            //Aggiungo un Workbook alla mia applicazione Excel
            Excel.Workbook wrk = xls.Workbooks.Add(Missing.Value);
            //Metto un riferimento all'oggetto Foglio1 del Workbook
            Excel.Worksheet sh1 = (Excel.Worksheet)wrk.Worksheets.get_Item("Foglio1");
            //Popolo la cella A1 del Foglio1
            sh1.Cells[1, 1].Value = 10;
            //Popolo la cella A2 del Foglio1
            sh1.Cells[2, 1].Value = 2;
            //In A3 del Foglio1 metto il risultato di A1*A2
            sh1.Cells[3, 1].Value = sh1.Cells[1, 1].Value * sh1.Cells[2, 1].Value;
            //Formatto in grassetto la cella A3 del Foglio1
            sh1.Cells[3, 1].Font.Bold = true;
            //Copio il contenuto di A3 del Foglio1...
            sh1.Cells[3, 1].Copy();
            //...e lo incollo in C1 del Foglio1
            sh1.Cells[1, 3].PasteSpecial();
            //Equivalente a Application.CutCopyMode = False del VBA
            xls.Application.CutCopyMode = 0;
            //Aggiungo il Foglio2
            wrk.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value);
            //Rinomino il nuovo foglio
            xls.ActiveSheet.Name = "NuovoFoglio";
            //Metto un riferimento al NuovoFoglio
            Excel.Worksheet sh2 = (Excel.Worksheet)wrk.Worksheets.get_Item("NuovoFoglio");
            //Copio il contenuto della cella C1 di Foglio1 nella cella A1 del foglio NuovoFoglio
            sh2.Cells[1, 1].Value = sh1.Cells[1, 3].Value;
            //Visualizzo Excel
            xls.Visible = true;
            //Salvo il file
            wrk.SaveAs("C:\\Prova\\NuovoFile.xls", Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, Missing.Value,
                Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            //Chiudo il Workbook
            wrk.Close(true, Missing.Value, Missing.Value);
            //Faccio il Quit dell'applicazione Excel
            xls.Quit();

            rilascioOggetto(sh1);
            rilascioOggetto(wrk);
            rilascioOggetto(xls);
            //Console.ReadLine();
        }
        private static void rilascioOggetto(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                Console.WriteLine("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }
    }
}

Beh, qui chi programma in VBA vedrà un bel po' di cose familiari, soprattutto se programma ad oggetti, come consigliamo da sempre, proprio perché prima o poi con la programmazione ad oggetti ci si deve avere a che fare.

Non ci resta che lanciare il debug per vedere se tutto va come dovrebbe e non ci sono errori. IL debug si può lanciare con la freccia verde che abbiamo in alto nell'editor o tramite il tasto F5 sulla tastiera.

Alcune spiegazioni:

  • i riferimenti alle celle vanno fatti numero riga/numero colonna, quindi non A1 ma 1,1 e inoltre non fra parentesi tonde ma quadre
  • non abbiamo il With , disponibile invece in Visual Basic.Net del quale (forse) mi occuperò in un prossimo articolo
  • metodi, proprietà, ecc. esposti dalle librerie sono, ovviamente, gli stessi che utilizziamo in VBA

In pratica il programma crea un file di Excel, fa alcune modifiche ai fogli e quindi salva il file nella cartella C:\Prova\.

Spero di avervi messo addosso la voglia di provare. Al link qui sotto potete scaricare i file utilizzati per questo articolo (modificate il riferimento alla libreria di Excel in base alla versione di Excel installata sulla vostra macchina):

Testato in Windows7 Pro/8.1 Pro/10 Pro con Office2007/2010/2013/2016.

Nel prossimo articolo lanceremo un file di Excel e popoleremo uno dei suoi fogli prendendo i dati da un database di Access. Il tutto con poche righe di codice C#.

Commenti.

Sono graditi i tuoi commenti a questo articolo Wiki e, se lo ritieni interessante, per favore spunta la voce : E' stato utile all'inizio della pagina.

Grazie.

Risorse.


 Avvio Pulito di Windows
(courtesy of Microsoft MVP Franco Leuzzi)

Computer infettato da malware (courtesy of Microsoft MVP Vincenzo Di Russo)

Questo articolo è stato utile?

Siamo spiacenti che questo non sia stato utile.

Ottimo. Grazie per il tuo feedback.

Quanto sei soddisfatto di questo articolo?

Grazie per il feedback, ci aiuta a migliorare il sito.

Quanto sei soddisfatto di questo articolo?

Grazie per il tuo feedback.

 

Informazioni articolo del forum


Ultimo aggiornamento 6 ottobre 2021 Visualizzazioni 198 Si applica a: