
rangogni (Normal User)
Newbie
    
Messaggi: 7
Iscritto: 07/11/2023
|
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# |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; using System.IO; namespace Gestione_ASD { public partial class HomePage : Form { //static readonly object ws; //static object wb; public HomePage() { InitializeComponent(); } private void HomePage_Load(object sender, EventArgs e) { { //percorso contiene l'indirizzo dove si trova il file libro soci del corrente anno string percorso = "B:\\prova.xlsm"; //Questo è il primo modo usato per aprire il file excel Excel.Application xApp; Excel.Workbook wb; //Definisco come chiamare il file Excel.Worksheet ws; //Definisco come chiamare foglio //Excel.Range xRange; //Al momento non lo uso object misValue = System.Reflection.Missing.Value; // Avvia Excel. xApp = new Excel. Application();//Definisco l'applicazione di Excel //wb sta per workbook cioè il file excel //ws sta per worsheet cioè per il foglio del file excel wb = (Excel.Workbook)(xApp.Workbooks.Add(percorso)); //Apre il file excel xApp.Visible = true; ((Excel.Worksheet)wb.Sheets[1]).Select(Type.Missing); //Seleziono il foglio(Soci) ws = (Excel.Worksheet)wb.ActiveSheet; //Attivo il foglio selezionato //posso accederre alle celle del file ad es ws.Cells[7, 2] = prova; //Per passare al secondo form uso un Button private void btnGestioneSoci_Click(object sender, EventArgs e) { GestioneSoci frm = new GestioneSoci (); frm.Show(); this.Hide(); } //Per salvare e chiudere il file wb.Save();//Salva il file Excel wb.Close();//Chiude il file Excel } } } }
|
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 |
|

()
Newbie
    
Messaggi:
Iscritto:
|
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
|
|

rangogni (Normal User)
Newbie
    
Messaggi: 7
Iscritto: 07/11/2023
|
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 |
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2338
Iscritto: 04/05/2008
|
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 |
ExcelPackage package = new ExcelPackage(@"B:\prova.xlsm");
ExcelWorksheet foglio = package.Workbook.Worksheets["NomeFoglio"];
//Scrivi
foglio.Cells["A1"].Value = "Ciao";
//leggi
string valore = foglio.Cells["A1"].Text;
|
Ultima modifica effettuata da Thejuster il 28/03/2024 alle 10:49
|
|

Carlo (Member)
Guru^2
    
Messaggi: 1420
Iscritto: 29/01/2018
|
nessuno alla risposta 3 ti dice come devi fare.
Qui di seguito un'altro modo VB like.
Nel form HomePage:
Codice sorgente - presumibilmente C++ |
using System; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace Gestione_ASD { public partial class HomePage : Form { public static Excel.Application xApp; // rende globale public static Excel.Workbook wb; // rende globale public static Excel.Worksheet ws ; // rende globale public HomePage() { InitializeComponent(); } private void HomePage_Load(object sender, EventArgs e) { //percorso contiene l'indirizzo dove si trova il file libro soci del corrente anno string percorso = "e:\\prova.xlsm"; //Questo è il primo modo usato per aprire il file excel object misValue = System.Reflection.Missing.Value; // Avvia Excel. xApp = new Excel.Application();//Definisco l'applicazione di Excel //wb sta per workbook cioè il file excel //ws sta per worsheet cioè per il foglio del file excel wb = (Excel.Workbook)(xApp.Workbooks.Add(percorso)); //Apre il file excel xApp.Visible = true; ((Excel.Worksheet)wb.Sheets[1]).Select(Type.Missing); //Seleziono il foglio(Soci) ws = (Excel.Worksheet)wb.ActiveSheet; //Attivo il foglio selezionato //posso accederre alle celle del file ad es ws.Cells[7, 2] = "prova"; } ////Per passare al secondo form uso un Button private void btnGestioneSoci_Click(object sender, EventArgs e) { GestioneSoci frm = new GestioneSoci(); frm.Show(); this.Hide(); } ////Per salvare e chiudere il file //wb.Save();//Salva il file Excel //wb.Close();//Chiude il file Excel } }
|
nel form GestioneSoci ora le variabili statiche dichiarate in HomePage, sono visibili e modificabili.
Codice sorgente - presumibilmente C++ |
using System; using System.Windows.Forms; namespace Gestione_ASD { public partial class GestioneSoci : Form { public GestioneSoci() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { HomePage.ws.Cells[7, 3] = "prova"; } } }
|
Ultima modifica effettuata da Carlo il 28/03/2024 alle 14:23
in programmazione tutto è permesso |
|

rangogni (Normal User)
Newbie
    
Messaggi: 7
Iscritto: 07/11/2023
|
Grazie infinite dei suggerimenti che appena ho un attimo li provo. Auguri di buona pasqua a tutti
Rangogni Roberto |
|

()
Newbie
    
Messaggi:
Iscritto:
|
A parte tutto, perchè usi un file Excel? Se hai sei dati da trattare dovresti usare un DBMS con C#
|
|

rangogni (Normal User)
Newbie
    
Messaggi: 7
Iscritto: 07/11/2023
|
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 |
|

()
Newbie
    
Messaggi:
Iscritto:
|
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
|
|