Discussione chiusa
Visualizzazione dei risultati da 1 a 2 su 2

[C#] [Excel] Riferimento a un oggetto non impostato su un'istanza di oggetto

  1. #1
    Fedee3 non è in linea Novello
    Buongiorno a tutti, sto creando un programma che da excel esporta dati su as400, in un pezzo di codice sto riscontrando un problema, mi da questo errore: Riferimento a un oggetto non impostato su un'istanza di oggetto.

    Il mio obbiettivo è quello di far selezionare all'utente il worksheet da una lista nella Form2, solo che ci sto provando in tutti i modi ma non ho riscontri positivi, mi servirebbe l'aiuto di qualcuno..

    Form 1 (pezzo interessato):

     //INIZIALIZZAZIONE VARIABILI GLOBALI
            public Excel.Application oXlsApp;
            public Excel.Workbook oXlsWorkbook;
            public Excel.Worksheet oXlsSheet;
            public string nomepippo;
            public int ws;
    
    Tramite il seguente pezzo assegno il file di excel al workbook, conto quanti fogli sono presenti in esso e mando tutti i dati alla Form2 con l'oggetto form2.

     public void button3_Click_1(object sender, EventArgs e)
            {
                textBox6.Text = "";
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "scegliere il file di excel da importare";
                ofd.Filter = "Excel File|*.xlsx|Excel File|*.xls|All Files|*.*";
    
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    textBox6.Visible = true;
                    textBox6.BackColor = Color.LightYellow;
                    textBox6.ForeColor = Color.Gray;
                    textBox6.Text = ofd.FileName;
                    ofd.InitialDirectory = @"C:\Users\fedev\source\repos\EXPORT";
                    string mySheet = textBox6.Text;
                    textBox6.ForeColor = Color.LightYellow;
                    oXlsApp = new Excel.Application();
                    oXlsSheet = new Excel.Worksheet();
                    oXlsWorkbook = oXlsApp.Workbooks.Open(mySheet);
    
                    oXlsApp.Workbooks[1].Activate();
                    oXlsApp.Worksheets[1].Activate();
                    for (int i = 0; i < oXlsWorkbook.Worksheets.Count; i++)
                    {
                        ws++;
                    }
                    Form2 form2 = new Form2();
                    form2.pippo = ws;
                    form2.apippo = oXlsApp;
                    form2.wspippo = oXlsSheet;
                    form2.wbpippo = oXlsWorkbook;
                    form2.Imposta();
                    form2.Show();
                }
            } //Importo file ARTCON (Scegli...) CON LISTBOX
    

    Dopo questo passaggio, dopo che i dati vengono elaborati nella form2 ho bisogno anche di "ritirarli" nella form1, quindi in un button di esecuzione ho anche inserito:

    string nome;
                nome = form2.wspippo.Name;
                MessageBox.Show(nome);
                oXlsSheet = oXlsWorkbook.Worksheets[nome]; //questo mi serve essenzialmente per impostare come sheet attivo quello che ha il nome che corrisponde al valore salvato nella variabile 'nome'
                form2.Hide();
    
    Form 2:

    namespace EXPORT
    {
        public partial class Form2 : Form
        {
            //DICHIARAZIONE VARIABILI
            public int pippo;
            public string nomepippo;
            public Excel.Application apippo;
            public Excel.Workbook wbpippo;
            public Excel.Worksheet wspippo;
            public int count;
    
            
            public void Imposta()
            {
                for (int i = 0; i < pippo; i++) //fai conta dei worksheets attivi 
                {
                    count++;
                    wspippo = wbpippo.Worksheets[count];
                    listBox1.Items.Add(wspippo.Name); //aggiungi elemento nella lista con il nome del foglio (con il ciclo vengono inseriti tutti)
                }
            } //imposta e mostra nella lista tutti i fogli (con il loro nome)
    
    
    
            public Form2()
            {
                InitializeComponent();
            } 
    
    
    
            public void listBox1_DoubleClick(object sender, EventArgs e)
            {
                apippo.Visible = false;
                if (apippo == null)
                {
                    MessageBox.Show("Excel non è stato installato correttamente.", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
    
                pippo = Convert.ToInt32(listBox1.SelectedIndex + 1); //pippo contiene l'indice del ws selezionato //per indice numerico
                nomepippo = listBox1.SelectedItem.ToString(); //assegno a nomepippo il nome del ws selezionato
                label1.Text = nomepippo;
                MessageBox.Show("Foglio selezionato: " + nomepippo + " alla posizione: " + pippo);
                wspippo = wbpippo.Worksheets[nomepippo];
                MessageBox.Show(wspippo.Name);
    
            } //Selezione ITEM e assegnazione alle corrispondenti variabili
    
    
        }
    }
    
    Grazie se riuscite a rispondermi!
    Ultima modifica di AntonioG; 30-07-2021 15:32 

  2. #2
    Chiuso per crossposting.
    ℹ️ Leggi di più su AntonioG ...

Discussione chiusa

Potrebbero interessarti anche ...

  1. duplicare oggetto per valore e non per riferimento
    Da SebastianoFloridia nel forum C#
    Risposte: 8
    Ultimo Post: 07-04-2021, 23:16
  2. Risposte: 3
    Ultimo Post: 10-11-2014, 19:54
  3. Risposte: 7
    Ultimo Post: 30-07-2010, 15:44
  4. Perdita riferimento oggetto MapiFolder
    Da jj75 nel forum Microsoft Word
    Risposte: 5
    Ultimo Post: 07-09-2009, 10:32
  5. Riferimento a un oggetto SubForm
    Da davideleo nel forum Microsoft Word
    Risposte: 17
    Ultimo Post: 24-06-2006, 13:35