Oppure

Loading
C#




Loading
27/03 15:57
rangogni
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.


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 28/03 9:42
Rangogni Roberto
27/03 16:16
nessuno
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à.
28/03 9:08
rangogni
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
28/03 9:48
Thejuster
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

github.com/JanKallman/…

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

Ti basterà in seguito fare


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 28/03 9:49
mire.forumfree.it/ - Mire Engine
C# UI Designer
28/03 12:45
Carlo
nessuno alla risposta 3 ti dice come devi fare.

Qui di seguito un'altro modo VB like.

Nel form HomePage:
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.

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 28/03 13:23
in programmazione tutto è permesso
28/03 13:07
rangogni
Grazie infinite dei suggerimenti che appena ho un attimo li provo. Auguri di buona pasqua a tutti
Rangogni Roberto
28/03 13:28
nessuno
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à.
29/03 15:09
rangogni
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