Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - C#
Forum - C# / VB.NET - C#

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
rangogni (Normal User)
Newbie


Messaggi: 7
Iscritto: 07/11/2023

opzione 1 aprire file Excel
opzione 2 passare il file excel ad un altra windows form
Segnala al moderatore
Postato alle 16:57
Mercoledì, 27/03/2024
Scusate su magari la mia domanda è troppo semplice ma non sono riuscito a trovare una soluzione. In pratica io riesco ad aprire un file excel in form diciamo form Homepage e  posso anche manipolarlo. Però io vorrei poterlo trasferire ad un altro form diciamo form GestioneSoci dove poterlo modificare e poi salvarlo. Per un semplice testo in internet ho trovato molti tutorial che spiegano come passare un singolo data ad un altro form ma per un intero file non ho trovato nulla. Io uso visual studio 2019 e con VB.Net usando visual basic non ho avuto problemi a passare i file da un form ad un altro. Vorrrei fare la stessa cosa con C#. Aggiungo il codice del main dove apro il file.

Codice sorgente - presumibilmente C#

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using Excel = Microsoft.Office.Interop.Excel;
  11. using System.IO;
  12.  
  13. namespace Gestione_ASD
  14. {
  15.  
  16.     public partial class HomePage : Form
  17.     {
  18.         //static readonly object ws;
  19.         //static object wb;
  20.         public HomePage()
  21.         {
  22.             InitializeComponent();
  23.         }
  24.         private void HomePage_Load(object sender, EventArgs e)
  25.         {
  26.             {
  27.                  //percorso contiene l'indirizzo dove si trova il file libro soci del corrente anno
  28.                 string percorso = "B:\\prova.xlsm";
  29.  
  30.                 //Questo è il primo modo usato per aprire il file excel
  31.                 Excel.Application xApp;
  32.                 Excel.Workbook wb;      //Definisco come chiamare il file
  33.                 Excel.Worksheet ws;     //Definisco come chiamare foglio
  34.                 //Excel.Range xRange;   //Al momento non lo uso
  35.                 object misValue = System.Reflection.Missing.Value;
  36.  
  37.                 // Avvia Excel.
  38.                 xApp = new Excel.Application();//Definisco l'applicazione di Excel
  39.  
  40.                 //wb sta per workbook cioè il file excel
  41.                 //ws sta per worsheet cioè per il foglio del file excel
  42.  
  43.                 wb = (Excel.Workbook)(xApp.Workbooks.Add(percorso));   //Apre il file excel
  44.                 xApp.Visible = true;
  45.                 ((Excel.Worksheet)wb.Sheets[1]).Select(Type.Missing);  //Seleziono il foglio(Soci)
  46.                 ws = (Excel.Worksheet)wb.ActiveSheet;                  //Attivo il foglio selezionato
  47.  
  48.                 //posso accederre alle celle del file ad es
  49.                 ws.Cells[7, 2] = prova;
  50.  
  51.                //Per passare al secondo form uso un Button
  52.                private void btnGestioneSoci_Click(object sender, EventArgs e)
  53.                {
  54.                     GestioneSoci frm = new GestioneSoci();
  55.                     frm.Show();
  56.                     this.Hide();
  57.                 }
  58.  
  59.                 //Per salvare e chiudere il file
  60.                wb.Save();//Salva il file Excel
  61.                 wb.Close();//Chiude il file Excel
  62.  
  63.             }
  64.         }
  65.  
  66.      }
  67. }



Spero di essere stato chiaro ma a disposizione per ogni chiarimento
Ringrazio in anticipo per ogni suggerimento
Roberto
rangogni@libero.it

Ultima modifica effettuata da Thejuster il 28/03/2024 alle 10:42


Rangogni Roberto
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:16
Mercoledì, 27/03/2024
Allora

1 il titolo che hai dato al thread non serve a nulla, devi indicare in maniera concisa il problema

2 il codice va incluso tra tag CODE quando lo inserisci nel forum

3 la richiesta tipo sondaggio non ha senso

Detto questo, non si capisce nulla del problema che hai, in particolare

1 se hai un file Excel perchè usi C# per gestirlo e non VBA do Excel? Non ha senso

2 perché da C# apri e visualizzi il file Excel? Questo ha ancora meno senso

3 se vuoi utilizzare l'istanza di Excel aperta devi passare le variabili oggetto che servono xlapp ws come parametri al costruttore del secondo form

Ma tutto ha poco senso


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
rangogni (Normal User)
Newbie


Messaggi: 7
Iscritto: 07/11/2023

Segnala al moderatore
Postato alle 10:08
Giovedì, 28/03/2024
Chiedo scusa per tutti gli errori commessi ma è la prima volta che inserivo qualcosa nel forum. Riguardo le osservazioni fatte vorrei precisare che la lettura e gestione del file di Excel fa parte di un progetto che sto cercando di costruire e che comprende altre cose. Il progetto l'avevo già costruito usando il Visual basic ma ora vorrei imparare ad usare C# che ritengo sia più adatto e potente. NOn ho pretese di fare un progetto vendibile ma è solo per me. Nella mia esperienza lavorativa ho sempre sviluppato modelli matematici in fluidodinamica usando il linguaggio Fortran ed ora che sono in pensione mi cimento (ci provo) con altri linguaggi. Ringrazio comunque per ogni suggerimento e mi scuso in anticipo se commetto errori stupidi da principiante.


Rangogni Roberto
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2308
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:48
Giovedì, 28/03/2024
Usando l'interop di excel è un processo veramente lungo, noioso e abbastanza complicato da fare.
Tuttavia, hai a la possibilità di installare pacchetti Nuget per ottenere librerie che fanno al tuo caso.

Una di queste è EPPlus

https://github.com/JanKallman/EPPlus

o usando direttamente il gestore dei pacchetti nuget, installi direttamente la libreria nel tuo progetto.

Ti basterà in seguito fare


Codice sorgente - presumibilmente C# / VB.NET

  1. ExcelPackage package = new ExcelPackage(@"B:\prova.xlsm");
  2.  
  3. ExcelWorksheet foglio = package.Workbook.Worksheets["NomeFoglio"];
  4.  
  5.  
  6. //Scrivi
  7.  
  8. foglio.Cells["A1"].Value = "Ciao";
  9.  
  10. //leggi
  11. string valore = foglio.Cells["A1"].Text;




Ultima modifica effettuata da Thejuster il 28/03/2024 alle 10:49


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1350
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:45
Giovedì, 28/03/2024
nessuno alla risposta 3 ti dice come devi fare.

Qui di seguito un'altro modo VB like.

Nel form HomePage:
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Windows.Forms;
  3. using Excel = Microsoft.Office.Interop.Excel;
  4.  
  5. namespace Gestione_ASD
  6. {
  7.     public partial class HomePage : Form
  8.     {
  9.         public static Excel.Application xApp; // rende globale
  10.         public static Excel.Workbook wb; // rende globale
  11.         public static Excel.Worksheet ws ; // rende globale
  12.  
  13.         public HomePage()
  14.         {
  15.             InitializeComponent();
  16.         }
  17.  
  18.         private void HomePage_Load(object sender, EventArgs e)
  19.         {
  20.  
  21.             //percorso contiene l'indirizzo dove si trova il file libro soci del corrente anno
  22.             string percorso = "e:\\prova.xlsm";
  23.  
  24.             //Questo è il primo modo usato per aprire il file excel
  25.             object misValue = System.Reflection.Missing.Value;
  26.  
  27.             // Avvia Excel.
  28.             xApp = new Excel.Application();//Definisco l'applicazione di Excel
  29.  
  30.             //wb sta per workbook cioè il file excel
  31.             //ws sta per worsheet cioè per il foglio del file excel
  32.  
  33.             wb = (Excel.Workbook)(xApp.Workbooks.Add(percorso));   //Apre il file excel
  34.             xApp.Visible = true;
  35.             ((Excel.Worksheet)wb.Sheets[1]).Select(Type.Missing);  //Seleziono il foglio(Soci)
  36.             ws = (Excel.Worksheet)wb.ActiveSheet;                  //Attivo il foglio selezionato
  37.  
  38.             //posso accederre alle celle del file ad es
  39.             ws.Cells[7, 2] = "prova";
  40.         }
  41.  
  42.         ////Per passare al secondo form uso un Button
  43.         private void btnGestioneSoci_Click(object sender, EventArgs e)
  44.         {
  45.             GestioneSoci frm = new GestioneSoci();
  46.             frm.Show();
  47.             this.Hide();
  48.         }
  49.  
  50.         ////Per salvare e chiudere il file
  51.         //wb.Save();//Salva il file Excel
  52.         //wb.Close();//Chiude il file Excel
  53.  
  54.     }
  55. }



nel form GestioneSoci ora le variabili statiche dichiarate in HomePage, sono visibili e modificabili.

Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace Gestione_ASD
  5. {
  6.     public partial class GestioneSoci : Form
  7.     {
  8.         public GestioneSoci()
  9.         {
  10.             InitializeComponent();
  11.         }
  12.  
  13.         private void button1_Click(object sender, EventArgs e)
  14.         {
  15.             HomePage.ws.Cells[7, 3] = "prova";
  16.         }
  17.     }
  18. }


Ultima modifica effettuata da Carlo il 28/03/2024 alle 14:23


in programmazione tutto è permesso
PM Quote
Avatar
rangogni (Normal User)
Newbie


Messaggi: 7
Iscritto: 07/11/2023

Segnala al moderatore
Postato alle 14:07
Giovedì, 28/03/2024
Grazie infinite dei suggerimenti che appena ho un attimo li provo. Auguri di buona pasqua a tutti


Rangogni Roberto
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:28
Giovedì, 28/03/2024
A parte tutto, perchè usi un file Excel? Se hai sei dati da trattare dovresti usare un DBMS con C#


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
rangogni (Normal User)
Newbie


Messaggi: 7
Iscritto: 07/11/2023

Segnala al moderatore
Postato alle 16:09
Venerdì, 29/03/2024
Rispondo a Carlo. Il suggerimento è ottimo e in compilazione non da nessun errore quindi sembra funzionare; ma quando lo eseguo nell'istruzione (di verifica che il file sia effettivamente usabile)

HomePage.ws.Cells[7, 3] = prova;

mi restituisce il seguente errore e il programma si arresta

System.NullReferenceException:
'Riferimento a un oggetto non impostato su un'istanza di oggetto.'

Dove sbaglio e eventualmente cosa devo fare?
Grazie ancora e buona pasqua


Rangogni Roberto
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:35
Venerdì, 29/03/2024
Rangogni... guarda bene... è "prova" non prova

Per Carlo, il codice che hai proposto viola uno dei principi della OOP (incapsulamento) ed è caratteristico di cattiva programmazione derivante da vecchie abitudini (vb6 e vba). Ovviamente è un grave errore se applicato professionalmente.
Se un mio collaboratore lo facesse, lo toglierei dal progetto


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo