domenica 23 settembre 2018

Visual Studio .Net Creazione di un pacchetto di setup in Visual Studio per C# e VB.Net ultima parte

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_creazione-di-un-pacchetto-di-setup-in-vi_1595.aspx


Ultima parte dell’articolo che fornisce informazioni e le basi per la creazione di un pacchetto di installazione per le nostre applicazioni “Windows Application” in questa ultima parte vedremo anche come provare il pacchetto di setup, eseguendolo su un pc.
Riprendiamo il progetto dell’articolo precedente qui https://www.iprogrammatori.it/articoli/programmazione/art_creazione-di-un-pacchetto-di-setup-in-vi_1594.aspx la seconda parte, e nella finestra “Esplora Soluzioni” facciamo click con il pulsante destro sul nome del progetto di setup, verrà visualizzato un menu di scelta rapida (figura 1) dove posizionando il mouse sulla voce “View” verrà aperto un sottomenu con delle voci.
La prima voce quella con la dicitura “File System” è quella che abbiamo visionato nei precedenti articoli, che è quella che viene visualizzata per prima quando si crea il progetto “Setup”.


Figura 1 – La voce di menu View

Come si è visto, ci permette di selezionare i file da copiare, assegnare un collegamento nel “Desktop” e nel menu programmi, creare cartelle, ed altro ancora.
Con la voce di menu “Registro di sistema” abbiamo la possibilità di impostare e creare delle chiavi di registro di “Windows”.
Mentre con la voce “Tipi di File” abbiamo la possibilità di impostare alcuni file o nuovi file con determinata estensione che si apriranno con il nostro programma.
Facciamo click su tale voce di menu.
Verrà aperta una finestra, con una dicitura del tipo “File Types on target machine” facciamo click con il tasto destro, e selezioniamo la voce di menu “Aggiungi tipo di file” (figura 2) permettendo in questo di impostare l’estensione del file.


Figura 2 – la voce di menu

A questo punto verrà creata una voce. Diamo il nome al “File Type Properties” , nel nostro caso abbiamo dato il nome “Demosetup”.


Figura 3 – la finestra delle impostazioni

Dopo aver impostato il nome, nella finestra delle proprietà, possiamo impostare varie informazioni, in particolare, la descrizione, che permette di visualizzare quando si passa il mouse sopra il nome del file di fornire una parte descrittiva, mentre la voce "Command" il programma che dovrà aprirlo, e questo tramite il click dentro la casella che ci permette di selezionare nel nostro progetto “Setup” il file eseguibile che dovrà aprire il file, tramite la voce "Extensions" il tipo di file da aprire o i tipi di file (separati da punto e virgola) nel nostro caso è stato impostato .ema, in questo modo tutti i programmi di questo tipo verranno aperti con il programma, e l’icona che contraddistingue i file da aprire con il nostro programma, anche in questo caso facendo click sulla casella verrà aperta una finestra per selezionare l’icona o il programma nel quale è presente l’icona, il tutto mostrato in figura 4.


Figura 4 - Le impostazioni per l’estensione.

Possiamo anche estendere tale funzionalità prevedendo parametri ed altro.
Se facciamo click con il tasto destro sul nome sul progetto di setup, nella voce di menu “View” selezioniamo la voce “Interfaccia utente” in questo modo abbiamo la possibilità di cambiare il testo e le varie finestre o estenderle che verranno visualizzate durante l’installazione, il tutto come riportato in figura 5.

Figura 5 – le finestre di installazione

Cliccando sulle varie finestre, possiamo apportare le varie modifiche.
Se facciamo click sulla voce “Azioni personalizzate” del menu “View”, possiamo impostare le azioni da prendere prima, durante e dopo l’installazione o nel caso che va male l'installazione, in figura 6 si vede la finestra.



Figura 6 – Le azioni personalizzate

Infine l’ultima voce “Condizioni di avvio” permette di impostare le installazioni o azioni da intraprendere, come si vede in figura 7 viene eseguita l’installazione solo se è installato o si installa il .Net Framework.


Figura 7 - la finestra delle condizioni di avvio

A questo punto abbiamo preparato il nostro pacchetto di Setup, non ci resta che testarlo. Facciamo tasto destro sul nome del progetto e tramite il menu di scelta rapida, selezioniamo la voce “Compila” oppure “Ricompila”.

Installazione del pacchetto

A questo punto verrà generata nella cartella “Debug” una serie di file, in particolare due file eseguibile denominati “setup.exe” e “setup1.exe”.
Copiamo questi file, nel pc nel quale vogliamo effettuare l’installazione oppure in una macchina virtuale.
Nella cartella “Programmi” andiamo a creare una sotto cartella denominata “Programma Prova” dove in questa cartella, il pacchetto di installazione installerà il file che abbiamo creato in precedenza denominato “MioFile.ema”.
Facciamo doppio click sul file denominato “setup.exe”, in questo modo partirà l’installazione guidata, tramite le finestre che abbiamo visto in precedenza, e che aiuterà l’utente a scegliere le impostazioni (figura 8).


Figura 8 – la finestra che guida l’utente all’installazione

Tramite il pulsante “Avanti” andiamo avanti e selezioniamo le impostazioni che ci vengono fornite.
Al termine dell’installazione, noteremo che sul Desktop e nel menu programmi verranno creati i collegamenti al programma oltre che impostare il programma di default per l’apertura dei file di tipo “.ema” ed assegnare un icona, il tutto come mostrato in figura 9.



Figura 9 – Le impostazioni dopo l’installazione

Conclusioni

In questi articoli abbiamo fornito al lettore aspetti di base e non per la creazione di un pacchetto di installazione per un nostro programma in ambito “Windows Application”. Le numerose opzioni che sono state elencate e la flessibilità dell’ambiente di Visual Studio 2017, permettono al lettore di avere gli strumenti adeguati per semplificare la creazione di pacchetti di installazione.
Altro aspetto molto importante è anche quello relativo alla semplicità di realizzare questi pacchetti, che con le varie funzionalità offerte dall’ambiente di sviluppo rendono intuito e facile tale utilizzo.

sabato 22 settembre 2018

download gratuito ebook Google Maps API

Google Maps API Succinctly


Un ebook che spiega e fornisce al lettore, le basi per la gestione delle API delle mappe di google.
Dal seguente sito https://www.syncfusion.com/ebooks/google_maps_api_succinctly si può scaricare, previa registrazione gratuita, un ebook, in formato pdf o per dispositivi mobile, in lingua inglese, un libro tecnico su come utilizzare tramite Javascript, le API di google Maps.
Per il download e maggiori informazioni visitate il sito indicato.

venerdì 21 settembre 2018

Sito di computer

Oggi segnalo un sito https://stefanopartipilo.altervista.org/ nel quale troviamo informazioni, trucchi ed altro materiale in ambito informatica.
Il sito è in italiano e costantemente aggiornato.

giovedì 20 settembre 2018

free ebook React JS Notes for Professionals

React JS Notes for Professionals

Un ebook che fornisce le basi per iniziare ad utilizzare il Framework React JS scaricabile da qui https://sf.tradepub.com/free/w_goaa36/ gratuitamente previa registrazione.
L'ebook è in lingua inglese e contiene numerosi esempi di codice.

mercoledì 19 settembre 2018

Evento gratuito Red Hat Open Source Day 2018




Torna l'evento più atteso in Italia in ambito di Open Source, parliamo del Red Hat Open Source Day 2018, nel quale i partecipanti potranno scoprire le novità e le potenzialità dei sistemi Red Hat.
L'evento, prevede inoltre degli stand, sessioni di casi reali di aziende e sessioni tecniche molto interessanti.
Per iscrizioni e maggiori informazioni visitate il seguente sito https://www.redhat.com/en/events/red-hat-open-source-day-italia

Editor online di immagini per applicare effetti

Altro sito con numerosi effetti per le immagini, è il seguente http://www.picturetopeople.org/ anche se non offre una navigabilità fluida e soprattutto attraente, ma di contro parte una serie di effetti grafici di notevole impatto e grande interesse.
Il sito è in lingua inglese e fornisce funzionalità molto valide.

martedì 18 settembre 2018

Evento gratuito NI Industry Summit 2018

Un evento tecnologico molto importante quello proposto dalla società National Instruments, che ha organizzato per il mese di novembre 2018, una bellissima giornata di formazione gratuita per scoprire gli strumenti per la gestione di alcuni settori industriali, come automobilistico, aerospaziale, IOT ed altro ancora.
L'evento è gratuito ed aperto a tutti, per partecipare bisogna iscriversi al seguente sito https://events.ni.com/profile/web/index.cfm?PKwebID=0x602120001&varPage=home nel quale è presente anche l'agenda ed altre informazioni utili.

blog su Microsoft Outlook

Oggi segnalo un blog, nel quale è possibile trovare articoli e trucchi sul programma di posta elettronica più venduto ed usato al mondo, Microsoft Outlook.
Il sito visibile qui https://www.msoutlook.info/ è in lingua inglese e con interessanti informazioni su questo programma.

lunedì 17 settembre 2018

Visual Studio Creazione di un pacchetto di setup in Visual Studio per C# e VB.Net parte 2

Si riporta l'articolo per il sito https://www.iprogrammatori.it/articoli/programmazione/art_creazione-di-un-pacchetto-di-setup-in-vi_1594.aspx


In questa seconda ed penultima parte, vedremo come aggiungere alcune funzionalità della creazione di un pacchetto di setup come visto nella prima parte qui https://www.iprogrammatori.it/articoli/programmazione/art_creazione-di-un-pacchetto-di-setup-in-vi_1593.aspx .
Riprendendo il precedente progetto (qui la prima parte), ed in particolare andremo nel dettaglio a vedere passo dopo passo la creazione di un pacchetto.
Iniziamo con aprire la finestra di “esplora soluzioni” con la quale selezioniamo il nostro progetto di setup e tramite il tasto F4 si aprirà la finestra delle proprietà.
Questa finestra fornisce interessanti indicazioni, che ci permette di impostare la cartella dove installare il programma, l’autore, una descrizione, che può tornare utile durante l’installazione ma soprattutto i parametri per poi realizzare le basi del pacchetto di installazione.
Dopo aver impostato la proprietà “Author” e “Description”, impostiamo la proprietà “Manufacturer” con il valore “DemoSetup”.
Questa proprietà oltre al nome del programma, imposta anche il nome della cartella che verrà creata sul pc di destinazione.
Nella finestra si possono notare anche altre impostazioni, ed eventi che possono tornare utile durante la fase di installazione con attività più avanzate.
Per ora ci soffermiamo con queste proprietà.
Nella figura 1 sono riportate le modifiche appena descritte.


Figura 1 – La finestra delle proprietà

Facciamo click sulla voce “Application Folder” che troviamo sulla finestra a sinistra, che riguarda la finestra che viene aperta non appena si crea il progetto, e vedremo che nella finestra delle proprietà, tramite la voce “DefaultLocation” è possibile vedere il percorso dove verrà creata la cartella, da notare tra le parentesi quadrate il valore “Manufacturer” che è il valore della proprietà che abbiamo visto nelle proprietà del setup (figura 1).
Sempre la finestra delle proprietà per la voce “Application Folder” notiamo alcune proprietà come la voce “AlwaysCreate” che sta ad indicare se viene sempre creata, oppure no.
In figura 2 è riportata la finestra delle proprietà


Figura 2 – La finestra delle proprietà della voce “Application Folder”.

Ora non ci resta che aggiunge i file e soprattutto fare in modo che le impostazioni di installazione sono eseguite secondo le nostre esigenze.
Prima di tutto, bisogna aggiungere al pacchetto di setup i file per il funzionamento dell’applicazione, questi oltre al file eseguibile, andrebbero aggiunti le varie Dll, file di configurazione, ed altri, tutto ciò che può servire ad eseguire in maniera corretta il nostro programma.
Sulla voce “Application Folder” facciamo tasto destro, e dal menu di scelta rapida, selezioniamo la voce “Add” si aprirà un sottomenu nel quale dovremmo fare click sulla voce “File” .
Nella finestra che viene aperta, selezioniamo i file che sono di nostro interesse, per esempio il file eseguibile, in automatico, verrà aggiunto nella cartella “Detected Dependencies” il framework che verrà installato nel caso il sistema non è provvisto, il tutto come in figura 3.


Figura 3 – L’aggiunta del file eseguibile.

Come indicato in precedenza, vedremo come copiare in una cartella diversa da quella dove andrà installato il programma, un file creato in precedenza “MioFile.ema”, copiato nella cartella denominata “Programma prova”.
Facciamo tasto destro sulla voce di sinistra denominata “File System on target machine” e dal menu che viene visualizzato (figura 4) selezioniamo la voce la voce “Add Speciale Folder” e nel sottomenu la voce “Cartella Programmi”.


Figura 4 – La finestra per la cartella programmi.

Come si vede dalla figura si possono gestire anche altre cartelle di Windows, quella dei file Comuni, dei programmi a 64 bit ed altro ancora.
Dopo aver fatto click sulla voce di menu “Cartella Programmi “ verrà creata una cartella denominata “Program Files Folder” a questo punto facciamo tasto destro su questa nuova voce e selezioniamo dal menu “Add” la voce “Folder” dove assegniamo alla cartella il valore “Programma Prova”, come illustrato in figura 5.


Figura 5 – La sotto cartella creata per applicare il file creato in precedenza

Dopo aver creato la cartella, aggiungiamo il file creato in precedenza “MioFile.ema” che verrà copiata in questa cartella, che potrebbe rappresentare un ulteriore programma installato o altro.
La procedura di inserire un file è la stessa che abbiamo visto per “Application Folder” dopo aver selezionato la cartella “Programma Prova”, facciamo click con il tasto destro, e nel menu che viene aperto, selezioniamo la voce “Add” e poi successivamente “File” a questo punto selezioniamo il file di nostro interesse.
Se facciamo click sul file, nella finestra delle proprietà verranno visualizzate alcune impostazioni, che indicano se il file dev’essere nascosto oppure no, se di sola lettura, ed altre impostazioni, il tutto come riportato in figura 6.


Figura 6 – Le proprietà per le impostazioni del file.

Ora non ci resta che applicare le ultime implementazione per questa finestra di impostazione, per passare alle altre voci.
In particolare possiamo creare dei collegamenti che aprono il nostro applicativo sia nel menu dei programmi di Windows e sia con una icona sul “Desktop”.
Selezioniamo la cartella “User’s Desktop” e nella finestra destra, facciamo click con il tasto destro, nel menu che viene visualizzato (figura 7) selezioniamo la voce “Crea collegamento”.


Figura 7 – La voce di menu per la creazione del collegamento.

Facciamo click su tale voce, verrà visualizzata una finestra (figura 8) con il quale dobbiamo scegliere quale file creare il collegamento.


Figura 8 – La finestra per la selezione del file da usare come collegamento.

Facciamo click sulla voce “application Folder” che è quella sezione nel quale abbiamo inserito i file, ed in particolare i file eseguibile.
A questo punto selezioniamo il file eseguibile che troviamo nella cartella.
Nella finestra proprietà (figura 9) verranno visualizzate alcune voci, per esempio il nome da dare al collegamento, tramite la proprietà “Name”, la descrizione che possiamo impostare tramite la proprietà “Description” nel visualizzare del testo informativo sul programma, oppure l’icona tramite la voce “Icon” . Prima di vedere la possibilità di impostare l’icona al collegamento, vediamo due proprietà molto importante.


Figura 9 – La finestra delle proprietà del collegamento

La voce “WorkingFolder” ha un valore impostato di default, che indica la cartella nel quale si trova il file eseguibile, questo viene impostato non appena mettiamo il collegamento. Mentre la proprietà Folder” indica dove andrà il collegamento, e nel nostro caso sul desktop dell’utente che effettuerà l’installazione.
Vediamo come impostare l’icona.
Dopo aver fatto click sul campo “Icon” selezionare la voce “Browse….” E nella finestra che viene aperta, selezioniamo la cartella nella quale abbiamo il nostro programma eseguibile, a questo punto come tipo di file, selezioniamo “AllFile” e poi il nome del file eseguible, dal quale verrà estrapolata l’icona (figura 10).


Figura 10 – La selezione del file eseguibile.

Confermiamo il tutto tramite il pulsante “Ok”, in questo modo verrà visualizzato a video l’icona del file eseguibile, quella che abbiamo impostato al programma inizialmente, il tutto come mostrato in figura 11.


Figura 11 – L’icona del programma.

Confermiamo il tutto con il pulsante ok, in questo modo abbiamo impostato l’icona del collegamento al programma sul desktop.
Selezioniamo la cartella con la voce “User's Programs Menu” e nella colonna di destra, facciamo click con il tasto destro, nel menu che viene visualizzato facciamo click sulla voce “Crea nuovo collegamento” e ripetiamo gli stessi passaggi che abbiamo fatto per il desktop.
In questo caso il collegamento verrà creato nel menu programmi.
Ora accertiamoci che tutto funziona correttamente, tasto destro sul nome del progetto “Setup1” e selezioniamo “Compila” verifichiamo che fornisce come esito positivo ossia 1 completate e che non sono presenti errori.

Conclusioni

In questo penultimo articolo abbiamo visto come aggiungere alcune opzioni durante l’installazione e soprattutto scelte che permetteranno di impostare determinati azioni. Nel prossimo articolo vedremo altri aspetti ed effettueremo l’installazione vera e propria.

domenica 16 settembre 2018

Visual Studio .Net creazione di un pacchetto di setup in Visual Studio per C# e VB.Net

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_creazione-di-un-pacchetto-di-setup-in-vi_1593.aspx

In questo articolo vedremo come creare un semplice pacchetto di installazione, completo nelle sue funzionalità per la distribuzione delle nostre applicazioni di tipo Windows Application.
Questo articolo vuole fornire al lettore le varie indicazioni che permetteranno di realizzare un vero pacchetto di setup con le funzionalità più comuni che servono.
Inoltre nell’articolo fornirà al lettore interessanti indicazioni su come creare collegamenti sul desktop e nel menu per aprire il programma, o altre interessanti opzioni come quello di impostare l’estensione di un con il nostro programma o quella di copiare un nostro file in una cartella diversa da quella del nostro programma.
Proprio sull’ultimo punto, si crei una nuova cartella nella cartella dei programmi dove vengono installati i programmai.
Si crea una cartella denominata “Programma prova” in “C:\Program Files (x86)\” il tutto come illustrato in figura 1.



Figura 1 – La creazione della cartella

A questo punto possiamo iniziare ad aprire Visual Studio e creare i due progetti, uno di dimostrazione del tipo Windows Application e l’altro di Setup

Creazione dei progetti

Si crea un nuovo progetto di tipo Windows application, che potremmo denominare “WinDemoSetup”, e nella form aggiungiamo un pulsante.
Facciamo doppio click sul pulsante ed in visualizzazione codice scriviamo il seguente frammento per entrambi i linguaggi.



VB.Net

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        MessageBox.Show("Prova")

    End Sub
 

C#

  private void Button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show("Prova");

        }

A questo punto si aggiunge un nuovo file, selezioniamo dalla finestra, tramite esplora risorse, facciamo click sul nome del progetto, e selezioniamo aggiungi e nel sottomenu nuovo elemento, nella categoria “Generale” selezioniamo il modello “File di testo” a questo punto scriviamo nella casella del nome il valore MioFile.ema” con l’estensione “.ema” che sarà per l’apertura del nostro programma il tutto come mostrato in figura 2.


Figura 2 – La creazione del file

Nel file che verrà creato, scriviamo del testo e salviamolo.
Facciamo click sul nome del progetto con il tasto destro e selezioniamo la voce “Proprietà” in questo modo entriamo nelle impostazioni di progetto.
Nella prima schermata, quella relativa alla voce “Applicazione” impostiamo l’icona in questo modo, i file che avranno estensione . ema avrà tale immagine, il tutto come mostrato in figura 3 e 3B.


Figura 3 – Il campo per impostare l’icona per VB.Net



Figura 3 B – Il campo per impostare l’icona per C#

Dopo aver realizzato i punti precedenti non ci resta che creare un progetto di setup, visto che abbiamo predisposto il necessario per creare un pacchetto di setup.

Creazione del progetto di Setup


Facciamo click sul nome della soluzione e tramite il tasto destro, facciamo aggiungi e nel sottomenu selezioniamo la voce “Nuovo progetto” e nella finestra che viene aperta, selezioniamo la categoria “Altri tipi di progetto” e successivamente la sottocategoria “Visual Studio Installer” a questo punto tra i modelli offerti, selezioniamo quello denominato “Setup Project” come mostrato in figura 4.


Figura 4 – la scelta del progetto.

Confermiamo il tutto tramite il pulsante “OK”.
Utilizzeremo il modello “Setup Project” perché offre interessanti spunti e possibilità per il programma, altri tipi di progetti forniscono funzionalità diverse o per altri ambiti come può essere quello di tipo “Web setup Project” per i siti internet.
Dopo aver creato il progetto di Setup, verrà aperta una finestra con le informazioni relativa ai percorsi da impostare, come mostrato in figura 5.


 Figura 5 – Le varie cartelle

Questa finestra permette la gestione dei file, delle cartelle ed altre funzionalità per fornire all'utilizzatore gli strumenti e flessibilità nel creare pacchetti di una certa complessità

Conclusioni

In questa prima parte abbiamo introdotto il lettore alla creazione di un pacchetto di setup, nei prossimi articoli vedremo come creare le varie funzionalità ed ultimare il pacchetto.
In particolare, vedremo in quale cartella crearlo, le informazioni a video da visualizzare all'utente che lo sta installando, impostare l’estensione del file ema, creare dei collegamenti sul desktop e nella barra dei menu ed altri aspetti interessanti.

sabato 15 settembre 2018

Software gratuito per il trasferimento dei file EaseUS Todo PCTrans Free



Se dovete trasferire file da due pc, qui https://it.easeus.com/pc-transfer-software/pctrans-free.html è possibile scaricare una versione gratuita per tale attività.
Il software, in lingua italiana, permette di trasferire file ed applicazioni su altro dispositivo Windows.
Per il download e maggiori informazioni visitate il sito indicato.

venerdì 14 settembre 2018

Rilasciata la versione PowerShell Core 6.1

Come riportato dal seguente sito https://blogs.msdn.microsoft.com/powershell/2018/09/13/announcing-powershell-core-6-1/ è stata rilasciata la versione open source PowerShell Core 6.1 che permette di utilizzare questo strumento, anche su sistemi Linux e Mac.
Per maggiori informazioni e download visitate il sito indicato.

ebook gratuito MySQL Notes for Professionals

MySQL Notes for Professionals


Con circa 200 pagine in formato pdf, un valido manualetto per utilizzare in maniera autonoma il database MySql.
L'ebook scaricabile qui https://sf.tradepub.com/free/w_goaa26/ previa registrazione gratuita, è in lingua inglese.
Per maggiori informazioni ed altro visitate il sito indicato.

giovedì 13 settembre 2018

intelligenza artificiale rilasciata la versione ML.NET 0.5

TensorFlow-ML.NET application diagram

Microsoft continua ad investire in un nuovo settore, che sempre più trova interesse delle persone.
Parliamo della intelligenza artificiale, ed è di due giorni fa, l'annuncio del rilascio ufficiale della versione 0.5 del Framework ML.Net.

Per maggiori informazioni ed altro visitate il seguente sito https://blogs.msdn.microsoft.com/dotnet/2018/09/12/announcing-ml-net-0-5/  nel quale sono riportate le novità in questa nuova versione.

Effetti grafici su immagini

Effetto Water Writing

Un gran sito quello PhotoFunia visibile  https://photofunia.com/it/ che offre numerosi effetti grafici alle immagini che possiamo caricare, oppure presenti sul web o meglio ancora anche dalla nostra webcam.
Il sito è anche in lingua italiana, con la descrizione ed anteprima degli effetti.

mercoledì 12 settembre 2018

Rilevare informazioni di un sito web

Nel caso che volete avere informazioni su un sito, come il proprietario, ragione sociale ed altre informazioni utili, potete utilizzare il seguente tools https://www.whois.com/whois/ ed inserire l'indirizzo web dal quale volete avere informazioni.
A questo punto, tramite il pulsante "Search" avrete le informazioni di quel dominio.
Il sito è in lingua inglese.



martedì 11 settembre 2018

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

Si riporta un articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_vsto-excel-realizzare-un-componente-per-_1584.aspx



In questa seconda ed ultima parte, viene illustrata la tecnica o meglio il codice che permetterà di leggere i dati presenti in più file, e generare un file con tutti i dati rilevati.
Riprendendo il progetto creato nell’articolo precedente qui https://www.iprogrammatori.it/articoli/programmazione/art_vsto-excel-realizzare-un-componente-per-_1583.aspx, continuiamo la stesura del codice, in particolare nell’evento click del pulsante per la generazione del file Excel, quello situato nella parte in basso.

Stesura del codice
Facciamo doppio click sul pulsante per la generazione del file quello con la decitura “Genera” ed in visualizzazione codice, nell’evento click del pulsante, dovremmo scrivere il codice per la generazione del file.
Il codice che andremo ad implementare dovrà leggere i valori presente nei due file.
Si crea una funzione, che va a leggere nel secondo file, rilevando nel foglio di Excel le informazioni della colonna denominate rispettivamente città e telefono, tramite la condizione della colonna chiave, che abbiamo denominata ID per individuare il singolo record.
Tutto questo viene implementato come se fosse un database e come se andiamo a fare una select prendendo il record da una colonna chiave, che abbiamo creato in precedenza con il nome ID.
Qui di seguito la funzione per entrambi i linguaggi delle suddette operazioni.



Microsoft.Office.Interop.Excel.Worksheet, ByVal id As String, ByVal riga As Int64)

        Dim NomePathFileExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & txtFileB.Text.Trim() & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""

        Dim connessione As OleDbConnection = New OleDbConnection(NomePathFileExcel)

        Dim sql As String = "Select * from [Foglio1$] where ID=" & id & ";"

        Dim DtaDati As OleDbDataAdapter = New OleDbDataAdapter(sql, connessione)

        Dim DtsDati As DataSet = New DataSet()

        DtaDati.Fill(DtsDati)

        If DtsDati.Tables(0).Rows.Count > 0 Then

            foglioAttivo.Range("D" & riga).Value2 = DtsDati.Tables(0).Rows(0)("Citta").ToString()

            foglioAttivo.Range("E" & riga).Value2 = DtsDati.Tables(0).Rows(0)("Telefono").ToString()

        End If

 

        connessione.Close()

        DtaDati.Dispose()

        DtsDati.Dispose()

        connessione.Dispose()

    End Sub

 

C#

private void ImpostaCittaTelefono(Worksheet foglioAttivo, string id, Int64 riga)

        {

            string NomePathFileExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileB.Text.Trim() + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";

            OleDbConnection connessione = new OleDbConnection(NomePathFileExcel);

            string sql = "Select * from [Foglio1$] where ID=" + id + ";";

            OleDbDataAdapter DtaDati = new OleDbDataAdapter(sql, connessione);

            DataSet DtsDati = new DataSet();

            DtaDati.Fill(DtsDati);

            if (DtsDati.Tables[0].Rows.Count > 0)

            {

                foglioAttivo.Range["D" + riga].Value2 = DtsDati.Tables[0].Rows[0]["Citta"].ToString();

                foglioAttivo.Range["E" + riga].Value2 = DtsDati.Tables[0].Rows[0]["Telefono"].ToString();

 

            }

            connessione.Close();

            DtaDati.Dispose();

            DtsDati.Dispose();

            connessione.Dispose();

 

 

 

 

        }



Come si vede dal precedente codice, abbiamo utilizzato Ado.Net in particolare le classi per la gestione del database (oledbconection, oledbDataAdapter, e dataset) in modo che trattiamo i file Excel come un database. A questo punto, dopo aver eseguito la query, impostiamo nelle colonne del file Excel i valori che abbiamo rilevato.
A questo punto ritorniamo nell’evento click del pulsante per la generazione del file e scriviamo il codice che ci permette di impostare le colonne con i valori presenti nelle colonne denominate in nome e cognome.
Anche in questo caso la tecnica che  utilizzeremo è Ado.Net.
Al termine del codice, salveremo il file in base al percorso e nome del file impostato nella casella di testo riguardante la generazione del file, posta nella form.
Qui di seguito le suddette operazioni per entrambi i linguaggi.


VB.Net

 

Private Sub btnGenera_Click(sender As Object, e As EventArgs) Handles btnGenera.Click

        Try

            If txtNuovoFile.Text.Trim() = "" OrElse txtFileA.Text.Trim() = "" OrElse txtFileB.Text.Trim() = "" Then

                MessaggioInformazione("Imposatre in ogni casella il percorso e nome del file Excel")

                Return

            End If

           

            Dim foglioAttivo As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet

 

            Dim NomePathFileExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & txtFileA.Text.Trim() & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""

            Dim connessione As OleDbConnection = New OleDbConnection(NomePathFileExcel)

            Dim sql As String = "Select * from [Foglio1$];"

            Dim DtaDati As OleDbDataAdapter = New OleDbDataAdapter(sql, connessione)

            Dim DtsDati As DataSet = New DataSet()

            DtaDati.Fill(DtsDati)

            If DtsDati.Tables(0).Rows.Count > 0 Then

                foglioAttivo.Range("A1").Value = "ID"

                foglioAttivo.Range("B1").Value = "Nome"

                foglioAttivo.Range("C1").Value = "Cognome"

                foglioAttivo.Range("D1").Value = "Città"

                foglioAttivo.Range("E1").Value = "Telefono"

                Dim contatore As Long = 2

                For Each riga As DataRow In DtsDati.Tables(0).Rows

                    foglioAttivo.Range("A" & contatore).Value2 = riga("ID").ToString()

                    foglioAttivo.Range("B" & contatore).Value2 = riga("Nome").ToString()

                    foglioAttivo.Range("C" & contatore).Value2 = riga("Cognome").ToString()

                    ImpostaCittaTelefono(foglioAttivo, riga("ID").ToString(), contatore)

                    contatore = contatore + 1

 

                Next

 

            End If

 

 

            connessione.Close()

            DtaDati.Dispose()

            DtsDati.Dispose()

            connessione.Dispose()

 

 

            Globals.ThisAddIn.Application.ActiveWorkbook.SaveAs(txtNuovoFile.Text)

            MessaggioInformazione("File creato correttamente.")

 

 

        Catch ex As Exception

            MessaggioErrore(ex.Message)

        End Try

    End Sub

 

 

C#

private void btnGenera_Click(object sender, EventArgs e)

        {

            try

            {

                if (txtNuovoFile.Text.Trim() == "" || txtFileA.Text.Trim() == "" || txtFileB.Text.Trim() == "")

                {

                    MessaggioInformazione("Imposatre in ogni casella il percorso e nome del file Excel");

                    return;

                }

 

                Worksheet foglioAttivo = ((Worksheet)Globals.ThisAddIn.Application.ActiveSheet);

 

 

 

                string NomePathFileExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileA.Text.Trim() + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";

                OleDbConnection connessione = new OleDbConnection(NomePathFileExcel);

                string sql = "Select * from [Foglio1$];";

                OleDbDataAdapter DtaDati = new OleDbDataAdapter(sql, connessione);

                DataSet DtsDati = new DataSet();

                DtaDati.Fill(DtsDati);

 

                if (DtsDati.Tables[0].Rows.Count > 0)

                {

 

                    foglioAttivo.Range["A1"].Value = "ID";

                    foglioAttivo.Range["B1"].Value = "Nome";

                    foglioAttivo.Range["C1"].Value = "Cognome";

                    foglioAttivo.Range["D1"].Value = "Città";

                    foglioAttivo.Range["E1"].Value = "Telefono";

 

                    Int64 contatore = 2;

                    foreach (DataRow riga in DtsDati.Tables[0].Rows)

                    {

 

                        foglioAttivo.Range["A" + contatore].Value2 = riga["ID"].ToString();

                        foglioAttivo.Range["B" + contatore].Value2 = riga["Nome"].ToString();

                        foglioAttivo.Range["C" + contatore].Value2 = riga["Cognome"].ToString();

                        ImpostaCittaTelefono(foglioAttivo, riga["ID"].ToString(), contatore);

                        contatore += 1;

                    }

 

                }

 

                connessione.Close();

                DtaDati.Dispose();

                DtsDati.Dispose();

                connessione.Dispose();

            

 

                Globals.ThisAddIn.Application.ActiveWorkbook.SaveAs(txtNuovoFile.Text);

                MessaggioInformazione("File creato correttamente.");

 

 

            }

            catch (Exception ex)

            {

 

                MessaggioErrore(ex.Message);

            }

        }


Riportiamo il codice completo di entrambi i linguaggi.


VB.Net

Private Sub MessaggioInformazione(ByVal testo As String)

        MessageBox.Show(testo, "Crea File Excel", MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub

 

    Private Sub MessaggioErrore(ByVal testo As String)

        MessageBox.Show(testo, "Crea File Excel", MessageBoxButtons.OK, MessageBoxIcon.[Error])

    End Sub

 

    Private Sub btnFileA_Click(sender As Object, e As EventArgs) Handles btnFileA.Click

 

        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

 

    End Sub

 

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

 

    End Sub

 

    Private Sub btnFileB_Click(sender As Object, e As EventArgs) Handles btnFileB.Click

        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

    End Sub

 

    Private Sub BtnNuovoFile_Click(sender As Object, e As EventArgs) Handles BtnNuovoFile.Click

        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

    End Sub

 

    Private Sub btnGenera_Click(sender As Object, e As EventArgs) Handles btnGenera.Click

        Try

            If txtNuovoFile.Text.Trim() = "" OrElse txtFileA.Text.Trim() = "" OrElse txtFileB.Text.Trim() = "" Then

                MessaggioInformazione("Imposatre in ogni casella il percorso e nome del file Excel")

                Return

            End If

           

            Dim foglioAttivo As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet

 

            Dim NomePathFileExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & txtFileA.Text.Trim() & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""

            Dim connessione As OleDbConnection = New OleDbConnection(NomePathFileExcel)

            Dim sql As String = "Select * from [Foglio1$];"

            Dim DtaDati As OleDbDataAdapter = New OleDbDataAdapter(sql, connessione)

            Dim DtsDati As DataSet = New DataSet()

            DtaDati.Fill(DtsDati)

            If DtsDati.Tables(0).Rows.Count > 0 Then

                foglioAttivo.Range("A1").Value = "ID"

                foglioAttivo.Range("B1").Value = "Nome"

                foglioAttivo.Range("C1").Value = "Cognome"

                foglioAttivo.Range("D1").Value = "Città"

                foglioAttivo.Range("E1").Value = "Telefono"

                Dim contatore As Long = 2

                For Each riga As DataRow In DtsDati.Tables(0).Rows

                    foglioAttivo.Range("A" & contatore).Value2 = riga("ID").ToString()

                    foglioAttivo.Range("B" & contatore).Value2 = riga("Nome").ToString()

                    foglioAttivo.Range("C" & contatore).Value2 = riga("Cognome").ToString()

                    ImpostaCittaTelefono(foglioAttivo, riga("ID").ToString(), contatore)

                    contatore = contatore + 1

 

                Next

 

            End If

 

 

            connessione.Close()

            DtaDati.Dispose()

            DtsDati.Dispose()

            connessione.Dispose()

 

 

            Globals.ThisAddIn.Application.ActiveWorkbook.SaveAs(txtNuovoFile.Text)

            MessaggioInformazione("File creato correttamente.")

 

 

        Catch ex As Exception

            MessaggioErrore(ex.Message)

        End Try

    End Sub

 

    Private Sub ImpostaCittaTelefono(ByVal foglioAttivo As Microsoft.Office.Interop.Excel.Worksheet, ByVal id As String, ByVal riga As Int64)

        Dim NomePathFileExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & txtFileB.Text.Trim() & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""

        Dim connessione As OleDbConnection = New OleDbConnection(NomePathFileExcel)

        Dim sql As String = "Select * from [Foglio1$] where ID=" & id & ";"

        Dim DtaDati As OleDbDataAdapter = New OleDbDataAdapter(sql, connessione)

        Dim DtsDati As DataSet = New DataSet()

        DtaDati.Fill(DtsDati)

        If DtsDati.Tables(0).Rows.Count > 0 Then

            foglioAttivo.Range("D" & riga).Value2 = DtsDati.Tables(0).Rows(0)("Citta").ToString()

            foglioAttivo.Range("E" & riga).Value2 = DtsDati.Tables(0).Rows(0)("Telefono").ToString()

        End If

 

        connessione.Close()

        DtaDati.Dispose()

        DtsDati.Dispose()

        connessione.Dispose()

    End Sub

 

C#

private void MessaggioInformazione(string testo)

        {

            MessageBox.Show(testo, "Crea File Excel", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

 

 

        private void MessaggioErrore(string testo)

        {

            MessageBox.Show(testo, "Crea File Excel", MessageBoxButtons.OK, MessageBoxIcon.Error);

 

        }

        private void btnFileA_Click(object sender, EventArgs e)

        {

            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);

            }

        }

 

        private void btnFileB_Click(object sender, EventArgs e)

        {

            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);

            }

        }

 

        private void BtnNuovoFile_Click(object sender, EventArgs e)

        {

            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);

            }

        }

 

        private void btnGenera_Click(object sender, EventArgs e)

        {

            try

            {

                if (txtNuovoFile.Text.Trim() == "" || txtFileA.Text.Trim() == "" || txtFileB.Text.Trim() == "")

                {

                    MessaggioInformazione("Imposatre in ogni casella il percorso e nome del file Excel");

                    return;

                }

 

                Worksheet foglioAttivo = ((Worksheet)Globals.ThisAddIn.Application.ActiveSheet);

 

 

 

                string NomePathFileExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileA.Text.Trim() + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";

                OleDbConnection connessione = new OleDbConnection(NomePathFileExcel);

                string sql = "Select * from [Foglio1$];";

                OleDbDataAdapter DtaDati = new OleDbDataAdapter(sql, connessione);

                DataSet DtsDati = new DataSet();

                DtaDati.Fill(DtsDati);

 

                if (DtsDati.Tables[0].Rows.Count > 0)

                {

 

                    foglioAttivo.Range["A1"].Value = "ID";

                    foglioAttivo.Range["B1"].Value = "Nome";

                    foglioAttivo.Range["C1"].Value = "Cognome";

                    foglioAttivo.Range["D1"].Value = "Città";

                    foglioAttivo.Range["E1"].Value = "Telefono";

 

                    Int64 contatore = 2;

                    foreach (DataRow riga in DtsDati.Tables[0].Rows)

                    {

 

                        foglioAttivo.Range["A" + contatore].Value2 = riga["ID"].ToString();

                        foglioAttivo.Range["B" + contatore].Value2 = riga["Nome"].ToString();

                        foglioAttivo.Range["C" + contatore].Value2 = riga["Cognome"].ToString();

                        ImpostaCittaTelefono(foglioAttivo, riga["ID"].ToString(), contatore);

                        contatore += 1;

                    }

 

                }

 

                connessione.Close();

                DtaDati.Dispose();

                DtsDati.Dispose();

                connessione.Dispose();

            

 

                Globals.ThisAddIn.Application.ActiveWorkbook.SaveAs(txtNuovoFile.Text);

                MessaggioInformazione("File creato correttamente.");

 

 

            }

            catch (Exception ex)

            {

 

                MessaggioErrore(ex.Message);

            }

        }

 

        private void ImpostaCittaTelefono(Worksheet foglioAttivo, string id, Int64 riga)

        {

            string NomePathFileExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileB.Text.Trim() + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";

            OleDbConnection connessione = new OleDbConnection(NomePathFileExcel);

            string sql = "Select * from [Foglio1$] where ID=" + id + ";";

            OleDbDataAdapter DtaDati = new OleDbDataAdapter(sql, connessione);

            DataSet DtsDati = new DataSet();

            DtaDati.Fill(DtsDati);

            if (DtsDati.Tables[0].Rows.Count > 0)

            {

                foglioAttivo.Range["D" + riga].Value2 = DtsDati.Tables[0].Rows[0]["Citta"].ToString();

                foglioAttivo.Range["E" + riga].Value2 = DtsDati.Tables[0].Rows[0]["Telefono"].ToString();

 

            }

            connessione.Close();

            DtaDati.Dispose();

            DtsDati.Dispose();

            connessione.Dispose();

 

 

 

 

        }

 



Conclusioni


In questo articolo, è stata illustrata una tecnica di utilizzo di Excel in VSTO per entrambi i linguaggi di programmazione .Net più utilizzati per generare un file Excel da due file con i dati che fanno riferimento ad una colonna chiave.
Una tecnica che permette di unire file e generare uno solo file, o meglio fare il merge di più file. L’articolo è di base anche per la realizzazione di un programma ben più complesso che potrebbe ottimizzare il lavoro, nella gestione di più file, unendoli in uno solo.