sabato 28 febbraio 2015

TVLC Next programma per vedere film e sentire radio con possibilità di registrazione

TVLC Next Dirette TV e Radio anche Registrabili

Nuovo programma gratuito e portable di Antonio e Silvio, che questa volta fornisco un buon servizio in ambito di intrattenimento.
Il programma Tvlc Next, scaricabile dal seguente sito http://www.istitutomajorana.it/index.php?option=com_content&task=view&id=2399&Itemid=33 sito è un programma portable e quindi non richiede nessuna installazione, in italiano che permette di vedere la tv o sentire la radio, con possibilità di registrazione.
Un esempio di file Ini è presente sempre nel sito situato nella parte inferiore.
Flessibilità e utilità fanno di questo programma un ottimo strumento che ogni persona dovrebbe avere sul proprio pc.
Ci auguriamo che Antonio e Silvio, aggiornano la lista dei canali con nuovi link o quelli già esistenti nel caso che vengono cambiati.
Ancora un grazie a questi due eroi del web.

















martedì 24 febbraio 2015

Tutorial Reporting Services Il controllo Indicator

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_reporting-services-il-controllo-indicato_1383.aspx


In questo articolo vedremo come utilizzare il controllo “Indicator” di Reporting Services 2014.
Vedremo come utilizzare l’ambiente per la creazione dei Report di Visual Studio 2012, (Shell) che tra le funzionalità permette la creazione dei report.
Naturalmente  questo potente strumento dobbiamo averlo installato.

Creazione di una tabella e dei dati

Create una tabella in Sql Server, denominata “Popolazione” con due colonne, la prima colonna sarà denominata   “Citta” la seconda “Popolazione”.
A questo punto popolate i dati secondo le vostre esigenze, nel nostro caso abbiamo inserito i seguenti valori.
Citta Popolazione
Roma 6243000
Milano 2345600
Catania 643980
Firenze 1245987

Creazione del report

Dopo aver avviato Visual Studio 2012 Shell, dal menu File selezioniamo la voce di menu “Nuovo Progetto“, nella finestra che viene aperta (figura 1) selezioniamo la categoria “Reporting Services” e tra i modelli selezioniamo la voce “Report Server Project”, impostiamo nelle case un nome del progetto.



Figura 1 – La scelta del progetto

A questo punto nel progetto, dobbiamo aggiungere il report. Nella finestra “Esplora soluzione” (Figura 2) nella voce “Report” facciamo click con il tasto destro, sulla voce “Add New Report”  oppure aggiungi nuovo report.


Figura 2 – L’aggiunta di un report

A questo punto verrà avviato il wizard, una procedura guidata che permette all’utente di aggiungere il report.
La procedura di configurazione lo abbiamo descritto in maniera dettagliata nei precedenti articoli, anche se gli articoli erano riferiti a Reporting Services 2012, la procedura rimane identica.
Ricordiamoci di puntare alla tabella precedente creata, selezionando i due campi.
Terminata la procedura guidata, verrà visualizzata il report con le due colonne (figura 3) .



Figura 3 – La tabella con i due campi

Nei precedenti capitoli, abbiamo illustrato il controllo “Tablix” il quale visualizza le informazioni in modalità tabellare.
Il controllo si presenta con due righe, la prima le intestazione di colonne, mentre la seconda, i riferimenti ai campi della tabella.
Facciamo click sulla seconda riga, quella con il testo “[Popolazione]” ed eliminiamo tale valore.
Dalla barra degli strumenti (figura 4) selezioniamo il controllo “Indicator” e lo trasciniamo nel campo appena modificato.


Figura 4 – la barra degli strumenti con il controllo “Indicator” selezionato.

Dopo aver rilasciato il pulsante, verrà avviata la creazione guidata (figura 5) il quale ci fornisce le informazioni di come vogliamo impostare l’aspetto ed i dati del controllo.


Figura 5 –  Il wizard del controllo Indicator

Selezioniamo il primo esempio della voce “Directional” come mostrato in figura 5, fatto ciò  facciamo click sul pulsante “OK”.
A questo punto dobbiamo impostare i valori ed i dati di riferimento.
Facciamo click con il tasto destro sul nome del controllo e nel menu che viene visualizzato selezioniamo la voce “Indicator Proprietiers” o “Proprietà indicatore” nella finestra che viene aperta (figura 6) selezioniamo la voce “Values and States”.


Figura 6 – La finestra delle proprietà.

Nella finestra che viene aperta (figura 6) ,  selezioniamo la voce “Values and State”, in questa pagina ci sono dei campi da valorizzare.
Il campo “value” indica il riferimento al campo della tabella, mentre la voce “States Measurement Unit” va impostata in “Numeric” per via del valore numerico.
Nella parte inferiore, abbiamo la possibilità di impostare il tipo di icona, il colore delle immagini e la scala dei valori per i quali utilizzare un immagine piuttosto che un'altra.
Se facciamo l’anteprima, verranno visualizzate le immagini come mostrato in figura 7.



Figura 7 – Anteprima del report

Conclusioni

Abbiamo visto l’utilizzo del controllo Indicator, per visualizzare in forma grafica alcune informazioni dei dati. Un controllo per la gestione dei grafici che può tornare utile nella realizzazione dei report.

sabato 21 febbraio 2015

Free ebook: Microsoft Azure Essentials Fundamentals of Azure

Microsoft Azure Essentials Fundamentals of Azure



Dal seguente sito http://blogs.msdn.com/b/microsoft_press/archive/2015/02/03/free-ebook-microsoft-azure-essentials-fundamentals-of-azure.aspx   è possibile scaricare un ebook in lingua inglese su Azure.
Il manuale scaricabile gratuitamente in formato pdf, mobi e epub, fornisce al lettore indicazioni di base sulla architettura Azure.


venerdì 13 febbraio 2015

Dotnetcampus 2015

Ritorna l'appuntamento tanto atteso per chi si occupa di programmazione con la tecnologia .Net, il 30 maggio 2015, si svolgerà l'evento DotnetCampus http://www.dotnetcampus.it/ un giorno da segnare in agenda.
L'agenda è ancora in fase di preparazione ma vista la qualità offerta negli anni passati, di certo troveremo tante sessioni che affascineranno i programmatore, sviluppatori, dba di tutta Italia.
Per maggiori informazioni visitate il seguente sito http://www.dotnetcampus.it/

mercoledì 11 febbraio 2015

Crystal Report format string in date

Nel caso che vogliamo formattare un campo di tipo string in data, di tipo dd mm yyyy, in Crystal Report, nella sezione formula, il seguente frammento di codice permette tale formattazoine.


if not isnull({tabella.campo})  then
ToText(Cdate({tabella.campo}), "dd MMMM yyyy")

lunedì 9 febbraio 2015

Ext.net edit row only based value

Nel controllo GridPanel del framework Ext.Net nel caso che si vuole rendere una riga abilitata all'editor o no in base ad un valore, il frammento di codice qui di seguito illustra tale tecnica.

Nel tag Editor, impostare per l'evento BeforeEditor, una funzione javascript che verifica se il valore della riga che vogliamo modificare corrisponde o no ad un determinato valore, in caso contrario  disabilitiamo la modifica della riga.
Nella parte qui sotto la parte relativa al tag roweditor.

Parte Html

                                               
                                               
                                               

                                               


Mentre la funzione, accetta due parametri, il secondo lo possiamo utilizzare come indice della riga, per rilevare nel oggetto store il record, con il quale andiamo a verificare il valore del campo.
Qui di seguito tale funzione.

Funzione javascript

 var beforeEdit = function (rowEditor, rowIndex) {

            if (this.grid.store.getAt(rowIndex).data.MIOCAMPO == "VALORE") {
                return true;
            }
            else {
                return false;
            }
       

sabato 7 febbraio 2015

Asp.Net export to Csv

Nel caso che si vuole esportare il risultato di una select in Linq in Csv, il frammento di codice qui di seguito permette tale scenario.
Come si vede dal frammento di codice,  dobbiamo inserire i valori separati da punto e virgola, tramite l'oggetto StringBuilder, aggiungiamo le singole righe e tramite Response generiamo il file.
Qui di seguito l'esempio in C#

 var Valori = GetDati().Where(p => p.CampoID== "valore").ToList();
         var risultato = from n in Valori
               orderby n.campoA ascending
               select new
               {
                   Riga = n.CampoA,
                   Colonna = n.CampoB,
                   Lunghezza = n.CampoC
               };
         string Testo = "IntestazioneA;IntestazioneB;IntestazioneC";
         var sb = new StringBuilder();
         sb.AppendLine(Testo );
         foreach (var elemento in risultato)
         {

             Testo = elemento.CampoA+ ";" + elemento.CampoB+ ";" + elemento.CampoC + ";"  ;
             sb.AppendLine(Testo);
         }
         string attachment = "attachment; filename=NomeFile.csv";
         HttpContext.Current.Response.Clear();
         HttpContext.Current.Response.ClearHeaders();
         HttpContext.Current.Response.ClearContent();
         HttpContext.Current.Response.AddHeader("content-disposition", attachment);
         HttpContext.Current.Response.ContentType = "text/csv";
         HttpContext.Current.Response.AddHeader("Pragma", "public");
       
         HttpContext.Current.Response.Write(sb.ToString());
         HttpContext.Current.Response.End();

giovedì 5 febbraio 2015

C# Custom Linq Ordering

Nel caso che dobbiamo ordinare in maniera personalizzata un oggetto di tipo list, il frammento di codice qui di seguito illustra tale tecnica.
Supponiamo di avere una lista di classi, di cui una proprietà ha un certo valore, se vogliamo ordinare in base a determinati valori quella proprietà, tramite il metodo orderBy dell'oggetto list possiamo passare una funzione che valorizzo l'ordinamento.

Qui di seguito un esempio di codice



MiaClasse[] ListClass = GetAllDateClass();
 var Risultato = ListClass .OrderBy(f => OrderKey(f.ProprietA)).ToList();

  public int OrderKey(string Dato)
        {
          
            int result =
               Dato== "AA" ? 1 :
               Dato== "DD" ? 2 :
               Dato== "EE" ? 3 :
                            4;
            return result;
        }

nel metodo OrderBy viene richiamato la nostra funzione denominata OrderKey nella quale viene passato il valore della proprietà dell'oggetto.

lunedì 2 febbraio 2015

ext.net gridpanel roweditor textarea set height

Nel caso che dobbiamo utilizzare un textarea nella fase di editor in un controllo GridPanel la grandezza della casella risulterà delle dimensioni della riga della griglia.
Se vogliamo personalizzare la proprietà height e quindi la grandezza della casella textarea, dobbiamo impostare nella sezione style della pagina Aspx lo stile x-row-editor-body.
Qui di seguito un esempio.

 .x-row-editor-body
        {
            height: 100px !important;
        }

domenica 1 febbraio 2015

c# readalltext exception outofmemoryexception

Quando utilizziamo il metodo ReadAllText della classe file, nel caso che vengono gestiti file di grandi dimensioni si verifica l'eccezione outofmemoryException.
Per evitare ciò utilizzare il metodo ReadAllLines della classe File, che permette la gestione dei file di grandi dimensioni.

giovedì 29 gennaio 2015

LINQ to Entities does not recognize the method System.String PadRight(Int32, Char) and this method cannot be translated into a store expression LINQ to Entities non riconosce il metodo 'System.String PadRight(Int32, Char)', che pertanto non può essere convertito in un'espressione di archivio


Nel caso che si esegue un metodo, per esempio il metodo Padright di un oggetto di tipo string, durante l'esecuzione della query genera un errore come indicato dal titolo del post.
Qui di seguito la query che genera l'errore.


string spazio = "";
 var risultato = (from Dati in Oggetti()
                             where Dati.Campo == "1" 
                             select new
                             {

                                PrimoCampo= "1",
                                 SecondoCampo = (string.IsNullOrEmpty(Dati.CAmpoA) == true ? spazio .PadRight(10, ' ') : Dati.CAmpoA)
}

Per risolvere tale problema, dobbiamo utilizare la select nel methodo ToList utilizzato nell'espressione della query, che restituisca un insieme di tipo tolist.

Qui di seguito si riporta l'esempio di query Linq per risolvere tale errore.


string spazio = "";
Qui di seguito un esempio di codice
var risultato= (from Dati in Oggetti()
                        where Dati.Campo == "1" 
                        select Dati).ToList().Select(c => new  {
                            PrimoCampo= "1",
                            SecondoCampo = (string.IsNullOrEmpty(c.CAmpoA) == true ? spazio .PadRight(10, ' ').ToString() : c.CAmpoA)
                       
                        }).ToList();




martedì 27 gennaio 2015

.Net C# decomprimere file tar e gz tramite libreria tar-cs

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_decomprimere-file-di-tipo-tar-e-gz-trami_1372.aspx


In questo articolo vedremo come utilizzare la libreria Tar-Cs per decomprimere file compressi tramite il linguaggio di programmazione C#.
Prima di creare il progetto, bisogna scaricare la libreria gratuita, qui https://code.google.com/p/tar-cs/ è possibile scaricare il sorgente ed il componente.

Stesura del codice

Utilizzeremo un progetto di tipo Windows Application, per scoprire come utilizzare questo componente.
Dopo aver creato un progetto di tipo Windows Application, inseriamo un pulsante nella Windows Form, in questo modo al click del pulsante verrà eseguita l’operazione di estrazione file.
Passiamo in visualizzazione codice ed in particolare nell’evento “Click” del pulsante, dobbiamo scrivere il codice che permette di decomprimere il file.
Nell'evento verrà richiamata una funzione, che gli viene passata la cartella nella quale si trovano i file compressi.
Qui di seguito si riporta il frammento di codice delle suddette operazioni.


private void BtnEstrai_Click(object sender, EventArgs e)

        {

            if (DecomprimiFileCompresso(@"C:\CartellaFile\") == true)

            {

                MessageBox.Show("File estratti con successo.");

 

            }

            else

            {

                MessageBox.Show("Impossibile estrare i file");

           

           

            }


Il codice precedente è molto semplice, richiama una funzione (DecomprimiFileCompresso) in uno specifico percorso.
la funzione riportata qui di seguito, cerca tutti quei compressi di tipo .gz.
A sua volta verrà richiamata una funzione che permette di decomprimere tali file.
Qui di seguito si riporta il codice di tale operazioni.

private static bool DecomprimiFileCompresso(string PercorsoFile)

        {

            bool Esito = false;

            try

            {

 

 

                //eseguo la prima estrapolazione del file .gz nella stessa cartella dove si trovano i file .gz

                DirectoryInfo DiPercorsoFileGz = new DirectoryInfo(PercorsoFile);

 

               

                foreach (FileInfo fi in DiPercorsoFileGz.GetFiles("*.gz"))

                {

                    DecomprimiFileGz(fi);

                }

                //Decomprimo tutti i file *.tar

                Esito = DecomprimiFileTar(PercorsoFile);

 

            }

            catch (Exception ex)

            {

               

                throw ex;

            }

            return Esito;

        }

 
La funzione “DecomprimiFileCompresso” esegue una ricerca nella cartella che viene passata ed estrapola tutti i file .tar contenuti nel vari file di tipo “gz”.
A questo punto viene eseguita una funziona per estrapolare tutti i file di tipo gz e poi successivamente tutti i file di tipo “Tar”.
Qui di seguito sono riportati tali funzioni.



private static bool DecomprimiFileTar(string PercorsoFile)

        {

            bool Esisto = false;

            try

            {

                DirectoryInfo di = new DirectoryInfo(PercorsoFile);

 

                //Decomprimo tutti i file di tipo *.tar

                foreach (FileInfo fi in di.GetFiles("*.tar"))

                {

                    string PercorsoFileDecompresso = "";

                    string PathCartellaFile = "";

                    using (FileStream unarchFile = File.OpenRead(fi.FullName))

                    {

 

 

                        TarReader reader = new TarReader(unarchFile);

 

                        while (reader.MoveNext(true))

                        {

                            var path = reader.FileInfo.FileName;

                            if (reader.FileInfo.EntryType == EntryType.Directory)

                            {

                                //Essendo una cartella verifico se è quella che interessa (percorso superiore)

                                if (PercorsoFile.Contains(Path.GetDirectoryName(path)) == true)

                                {

                                    //creo la cartella ed estrapolo i dati

                                    PercorsoFileDecompresso = Path.Combine(PercorsoFile, Path.GetDirectoryName(path));

                                    Directory.CreateDirectory(PercorsoFileDecompresso);

                                    

                                    PathCartellaFile = Path.GetDirectoryName(path);

                                }

                            }

                            else

                            {

                                //Elaboro solo se nella variabile path (nome file) è presente la cartella da cui devo estrapolare i dati.

                                if (path.Contains("MioFile") & PathCartellaFile.Trim().Length > 1)

                                {

                                    //verifico che sia superiore a 3000 byte ossia 3 kb

                                    if (reader.FileInfo.SizeInBytes >= 3000)

                                    {

                                        path = Path.Combine(PercorsoFileDecompresso, Path.GetFileName(path));

                                        using (FileStream file = File.Create(path))

                                        {

                                            reader.Read(file);

                                            Esisto = true;

                                        }

                                    }

 

 

 

                                }

 

                            }

 

 

 

                        }

                    }

                }

 

            }

            catch (Exception ex)

            {

 

                throw ex;

            }

            return Esisto;

        }

 

        public static void DecomprimiFileGz(FileInfo pFileInfo)

        {

            //Rilevo lo stream dei file e decomprimo tutti i file .

            using (FileStream StreamFile = pFileInfo.OpenRead())

            {

                //imposto il nome del file togliendo l'estenzione .gz

                string FileCorrente = pFileInfo.FullName;

                string FileOrigine = FileCorrente.Remove(FileCorrente.Length - pFileInfo.Extension.Length);

 

               

                using (FileStream outFile = File.Create(FileOrigine))

                {

                    using (GZipStream Decompress = new GZipStream(StreamFile,    CompressionMode.Decompress))

                    {

                      

                        byte[] buffer = new byte[4096];

                        int numRead;

                        while ((numRead = Decompress.Read(buffer, 0, buffer.Length)) != 0)

                        {

                            outFile.Write(buffer, 0, numRead);

                        }

                      

                    }

                }

 

            }

        }








La funzione “DecomprimiFileTar”, estrae solo quei file che contengono il nome  di tipo “MioFile” e che hanno una dimensione superiore ai 3 kb. Questa gestione dei file avviene tramite la classe "TarReader" che permette la gestione dei file compressi.

Conclusioni

L’articolo ha voluto illustrare le potenzialità di questo componente, che può tornare utile anche in quei contesti con sistemi diversi.
Tramite la parola “Download” potete scaricare il progetto di esempio di questo articolo.

domenica 25 gennaio 2015

Ado.Net Excel To Csv creare un file Csv da un file Excel tramite VB.Net e C#

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_creazione-di-un-file-csv-da-un-file-exce_1371.aspx


In questo articolo vedremo come realizzare una procedura  o meglio una “Windows Application” che dato un file Excel genera un file di tipo CSV.
La particolarità di questo progetto è una parte dinamica, nel senso che può essere utilizzata  per la versione di Excel 2007 o inferiore, e che la lettura delle colonne avviene tramite indice delle colonne (le lettere, a, b, c, d).
Prima di tutto bisogna creare un file Excel, nella prima colonna precisamente in A1 mettete la dicitura Nome, nella seconda colonna (B1) mettete Cognome, e nella terza colonna (C1) mettete età.
A questo punto valorizzare i vari campi al di sotto, inserendo i dati a vostro piacimento.
Ora non ci resta che aprire Visual Studio 2010 e  realizzare tale procedura.

Creazione del progetto



Si crea un nuovo progetto di tipo “Windows Application” tramite il linguaggio di programmazione di proprio interesse (VB.Net  o C#) a questo punto, nella form inseriamo quattro controlli Label, quattro controlli TextBox ed un pulsante, il tutto come illustrato in figura 1.


Figura 1 – la form con i vari controlli

Valorizziamo i vari campi con i dati di nostro interesse.
La prima casella conterrà il file CSV da generare, la seconda casella il percorso e nome del file Excel dove estrapolare i dati, il terzo campo, il nome del foglio su cui leggere le informazione, mentre nel quarto ed ultimo campo le colonne su cui leggere i dati.
Ora passiamo in visualizzazione codice facendo doppio sul pulsante con la dicitura "Genera", in modo che vi viene visualizzato l’evento del pulsante.
Qui di seguito si riporta il codice dell’evento click del pulsante.


VB.Net

Private Sub BtnGenera_Click(sender As System.Object, e As System.EventArgs) Handles BtnGenera.Click

        EseguiElaborazione(TxtFileExcel.Text, TxtCsv.Text, TxtFoglio.Text, TxtColonne.Text)

        MessageBox.Show("Operazione completata")

    End Sub

 C#

private void BtnGenera_Click(object sender, EventArgs e)

        {

           

            EseguiElaborazione(TxtFileExcel.Text, TxtCsv.Text, TxtFoglio.Text, TxtColonne.Text);

            MessageBox.Show("Operazione completata");

 

        }


Come si vede dal codice, viene eseguita una funzione ,a cui sono passati i vari parametri, riguardante i valori inseriti nelle varie caselle di testo.
Di seguito elenchiamo le varie funzioni.
La funzione qui di seguito, permette di generare il file Csv passando il percorso e nome del file e come secondo parametro il testo da scrivere.


VB.Net

Private Shared Sub CreaFileCsv(NomeFileCSV As String, Testo As String)

        Try

            Using ScriviFile As New System.IO.StreamWriter(NomeFileCSV, False)

 

                ScriviFile.WriteLine(Testo)

 

            End Using

        Catch ex As Exception

 

            Throw ex

        End Try

 

    End Sub

 

C#

private static void CreaFileCsv(string  NomeFileCSV, string  Testo)

        {

            try

            {

                using (System.IO.StreamWriter ScriviFile = new System.IO.StreamWriter(NomeFileCSV, false))

                {

                    

                    ScriviFile.WriteLine(Testo);

                }

 

            }

            catch (Exception ex)

            {

 

                throw ex;

            }

 

        }

 
La funzione qui di seguito, permette di rilevare il nome delle colonne o meglio i campi della select che andremmo ad eseguire per estrapolare i dati dal file Excel.
L’algoritmo prendendo il nome dagli indici delle colonne (a,b,c,etc) rileva tali campi.
 
VB.Net

Private Shared Function OttieniNomeColonne(pColonne As DataTable, LetteraColonna As String) As String

 

        Dim LettereExcel As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

        '26

        Dim Colonne As String() = LetteraColonna.Split(","c)

        Dim NomeColonna As String = ""

        For ContaColonne As Integer = 0 To Colonne.Length - 1

            If ContaColonne > 0 Then

                NomeColonna += ","

            End If

            Dim Indice As Integer = -1

            If Colonne(ContaColonne).Trim().Length > 1 Then

                For ContaElementi As Integer = 0 To Colonne(ContaColonne).Length - 1

                    If ContaElementi > 0 Then

                        Indice += 25 + LettereExcel.IndexOf(Colonne(ContaColonne).Trim().Substring(ContaElementi + 1))

                    Else

                        Indice = LettereExcel.IndexOf(Colonne(ContaColonne).Trim().Substring(ContaElementi + 1)) + 1

 

                    End If

                Next

            Else

                Indice = LettereExcel.IndexOf(Colonne(ContaColonne).Trim())

            End If

            NomeColonna += pColonne.Columns(Indice).ColumnName.Trim()

        Next

 

        Return NomeColonna

    End Function

 

 

 

 

C#

private   string OttieniNomeColonne(DataTable pColonne, string  LetteraColonna)

        {

 

              string  LettereExcel = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //26

 

            string[] Colonne = LetteraColonna.Split(',');

            string  NomeColonna = "";

            for (int ContaColonne = 0; ContaColonne < Colonne.Length; ContaColonne++)

            {

                if (ContaColonne > 0)

                {

                    NomeColonna += ",";

                }

                int  Indice = -1;

                if (Colonne[ContaColonne].Trim().Length > 1)

                {

                    for (int ContaElementi = 0; ContaElementi < Colonne[ContaColonne].Length; ContaElementi++)

                    {

                        if (ContaElementi > 0)

                        {

                            Indice += 25 + LettereExcel.IndexOf(Colonne[ContaColonne].Trim().Substring(ContaElementi + 1));

                        }

                        else

                        {

                            Indice = LettereExcel.IndexOf(Colonne[ContaColonne].Trim().Substring(ContaElementi + 1)) + 1;

                        }

 

                    }

                }

                else

                {

                    Indice = LettereExcel.IndexOf(Colonne[ContaColonne].Trim());

                }

                NomeColonna += pColonne.Columns[Indice].ColumnName.Trim();

            }

 

            return NomeColonna;

        }



 Siamo giunti alla conclusione della stesura del codice, qui di seguito la funzione più importante, quella che ci permette di eseguire le query nel file di Excel ed estrapolare i dati.


 
VB.Net

 

Private Sub EseguiElaborazione(PercorsoFileExcel As String, PercorsoFileCsv As String, NomeFoglio As String, Colonne As String)

        Try

 

            Dim strConnectionString As String = ""

            If PercorsoFileExcel.Trim().EndsWith(".xlsx") Then

                strConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=" & ChrW(34) & "Excel 8.0;HDR=Yes;IMEX=1" & ChrW(34), PercorsoFileExcel)

            ElseIf PercorsoFileExcel.Trim().EndsWith(".xls") Then

                strConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=Yes"";", PercorsoFileExcel)

            End If

            'mi connetto alla base dati

            Using ObJConnection As New OleDbConnection(strConnectionString)

                ObJConnection.Open()

 

                Dim DtrRecord As OleDbDataReader

                Dim DtaQuery As New OleDbDataAdapter("Select top 1 * from [" & NomeFoglio & "$]  ;", ObJConnection)

                Dim DttDati As New DataTable()

                DtaQuery.Fill(DttDati)

                'Rilevo l'intestazione delle colonne

                Colonne = OttieniNomeColonne(DttDati, Colonne)

                'Ottengo i dati dopo aver rilevato i nomi delle colonne

                Dim DbCommandQuery As New OleDbCommand("Select " & Colonne & "  from [" & NomeFoglio & "$]  ;")

                DbCommandQuery.Connection = ObJConnection

                DtrRecord = DbCommandQuery.ExecuteReader()

                Dim DttDatiRisultato As New DataTable()

                'Rendo le colonne di tipo string

                Dim lNomeColonna As String() = Colonne.Split(",")

                For Each Colonna As String In lNomeColonna

                    DttDatiRisultato.Columns.Add(Colonna, GetType(String))

                Next

                DttDatiRisultato.Load(DtrRecord)

 

 

                Dim TestoDaScrivere As String = ""

                For Each Elemento As DataRow In DttDatiRisultato.Rows

                    For ContaColonne As Integer = 0 To Elemento.ItemArray.Length - 2

 

 

                        TestoDaScrivere += Elemento(ContaColonne).ToString() & ";"

                    Next

                    If TestoDaScrivere.Substring(TestoDaScrivere.Length - 1, 1) = ";" Then

                        TestoDaScrivere = TestoDaScrivere.Substring(0, TestoDaScrivere.Length - 1)

                    End If

 

 

 

                    TestoDaScrivere += vbCr & vbLf

                Next

 

 

 

                CreaFileCsv(PercorsoFileCsv, TestoDaScrivere)

            End Using

        Catch ex As Exception

            Throw ex

        End Try

 

 

    End Sub

 

 

C #

        private   void EseguiElaborazione(string  PercorsoFileExcel, string PercorsoFileCsv, string NomeFoglio, string Colonne)

        {

            

            try

            {

                string strConnectionString = "";

                if (PercorsoFileExcel.Trim().EndsWith(".xlsx"))

                    strConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;IMEX=1" + (char)34, PercorsoFileExcel);

                else if (PercorsoFileExcel.Trim().EndsWith(".xls"))

                {

                    strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes\";", PercorsoFileExcel);

                }

                //mi connetto alla base dati

                using (OleDbConnection ObJConnection = new OleDbConnection(strConnectionString))

                {

                    ObJConnection.Open();

                   

                    OleDbDataReader DtrRecord;

                    OleDbDataAdapter DtaQuery = new OleDbDataAdapter("Select top 1 * from [" + NomeFoglio + "$]  ;", ObJConnection);

                    DataTable DttDati = new DataTable();

                    DtaQuery.Fill(DttDati);

                    //Rilevo l'intestazione delle colonne

                    Colonne = OttieniNomeColonne(DttDati, Colonne);

                    //Ottengo i dati dopo aver rilevato i nomi delle colonne

                    OleDbCommand DbCommandQuery = new OleDbCommand("Select " + Colonne + "  from [" + NomeFoglio + "$]  ;");

                    DbCommandQuery.Connection = ObJConnection;

                    DtrRecord = DbCommandQuery.ExecuteReader();

                    DataTable DttDatiRisultato = new DataTable();

                    //Rendo le colonne di tipo string

                    string[] lNomeColonna = Colonne.Split(',');

                    foreach (var Colonna in lNomeColonna)

                    {

                        DttDatiRisultato.Columns.Add(Colonna, typeof(string));

                    }

                    DttDatiRisultato.Load(DtrRecord);

                   

                  

                    string TestoDaScrivere = "";

                    foreach (DataRow Elemento in DttDatiRisultato.Rows)

                    {

                        for (int ContaColonne = 0; ContaColonne < Elemento.ItemArray.Length - 1; ContaColonne++)

                        {

 

                            TestoDaScrivere += Elemento[ContaColonne].ToString()+ ";";

 

                        }

                        if (TestoDaScrivere.Substring(TestoDaScrivere.Length - 1, 1) == ";")

                        {

                            TestoDaScrivere = TestoDaScrivere.Substring(0, TestoDaScrivere.Length - 1);

                        }

 

 

                        TestoDaScrivere += "\r\n";

 

                    }

                   

                    CreaFileCsv(PercorsoFileCsv, TestoDaScrivere);

 

 

                }

            }

            catch (Exception ex)

            {

 

                throw ex;

            }

 

 

 

 

        }





Conclusioni

L’articolo ha fornito al lettore delle ottime indicazioni di come creare un programma di tipo Windows Application, flessibile e dinamico per la lettura dei dati da un file di tipo Excel, di qualsiasi versione e generare un file di tipo CSV.
Tramite le classi di Ado.Net e precisamente di OleDB, possiamo lavorare sui file di tipo Excel.
Tramite la parola Download è possibile scaricare il progetto utilizzato in questo articolo.