Oppure

Loading
C#




Loading
01/04 14:16
Vedi Carlo?

È impossibile aiutare chi sta a zero o anche meno.

Un forum di programmazione, piaccia o non piaccia, ha bisogno che un minimo di basi ci siano da parte di chi chiede altrimenti non si può instaurare un minimo di discorso.

Io so solo che le note sono sette e non vado oltre, non credo di chiedere in un forum di musica come scrivere una sinfonia, so cosa mi risponderebbe (con mille ragioni).
02/04 8:56
rangogni
Ok ammetto di non essere un esperto di C# ma non mi sento sicuramente un imbranato di prima categoria nell'uso della programmazione per ricevere tutti le osservazioni fatte che comunque accetto e ringrazio. In ogni caso in scrittura del codice non mi sottolinea nulla e in compilazione non mi da ne errori ne avvisi. Ad ogni modo allego i file completi sia del Form1 che quello del Form2 e infine il messaggio di errore completo. Spero ne capiate più di me. Cordiali saluti
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 Apri_File_Excel
{
public partial class Form1 : Form
{
public static Excel.Application xApp; // rende globale
public static Excel.Workbook wb; // rende globale
public static Excel.Worksheet ws; // rende globale
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
{
//percorso contiene l'indirizzo dove si trova il file libro soci del corrente anno
string percorso = "D:\Linguaggio C#\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

//Per salvare e chiudere il file
//wb.Save();//Salva il file Excel
//wb.Close();//Chiude il file Excel

}
}

private void btnApriForm2_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
this.Hide();
}
}
}

using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Windows.Forms;

namespace Apri_File_Excel
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{

//string letto;
//letto = Form1.ws.Cells[7, 1];
Form1.ws.Cells[7, 3] = "prova";
}
}
}

Infine
Rangogni Roberto
02/04 9:47
Carlo
Il codice tra i tag [ code ] è più leggibile.

Dichiari prima le variabili del foglio pubbliche e poi le ridichiari... Così facendo quelle pubbliche restano vuote.

Il tuo codice con le doppie dichiarazioni remmate:

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 Apri_File_Excel
{
    public partial class Form1 : Form
    {
        public static Excel.Application xApp; // rende globale
        public static Excel.Workbook wb;      // rende globale
        public static Excel.Worksheet ws;     // rende globale
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            {
                //percorso contiene l'indirizzo dove si trova il file libro soci del corrente anno
                string percorso = "D:\Linguaggio C#\prova.xlsm";

                // Queste non le devi riinizializzare *******************
                // 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

                 //Per salvare e chiudere il file
                //wb.Save();//Salva il file Excel
                //wb.Close();//Chiude il file Excel

            }
        }

        private void btnApriForm2_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.Show();
            this.Hide();
        }
    }
} 


Se riguardi il mio post di Giovedì 28/03/2024 alle 13:45, già era così...
Ultima modifica effettuata da Carlo 02/04 10:24
in programmazione tutto è permesso
02/04 14:31
rangogni
Rispondo a Carlo: in compilazione non mi dava nessun errore e prova non era sottolineato in rosso ne dava neanche un avviso in compilazione. Comunque sono grato delle critiche che in ogni caso sono sempre costruttive (lo dico per esperienza personale).
Ad ogni modo con l'ultimo aiuto ho trovato l'errore e adesso funziona che è una meraviglia. L'errore era nell'ordine in cui si gestiva l'apertura del file cioè l'istruzione
object misValue = System.Reflection.Missing.Value;
andava messa come prima istruzione e non dopo aver aperto il file. Trovo strano che ne in compilazione ne in esecuzione il sistema non mi facesse notare l'errore. In ogni caso, Grazie a voi ed alle mie prove sono riuscito a risolvere il problema.
Cordiali saluti e buon lavoro a tutti
Rangogni Roberto
02/04 14:35
Roberto... sapere come si dichiarano e utilizzano le variabili (membri di classe in questo caso) è l'abc dell'abc della programmazione.

Quando ti dico che devi studiare, dico di farlo PRIMA di provare a scrivere codice. Adesso non riesci neanche a fare copia incolla e capire il minimo errore che si presenta. Non è cattiveria, è realtà.

Fermati e studia dalle basi prima di fare altro!
02/04 15:53
Carlo
Postato originariamente da rangogni:

L'errore era nell'ordine in cui si gestiva l'apertura del file cioè l'istruzione
object misValue = System.Reflection.Missing.Value;
andava messa come prima istruzione e non dopo aver aperto il file. Trovo strano che ne in compilazione ne in esecuzione il sistema non mi facesse notare l'errore. In ogni caso, Grazie a voi ed alle mie prove sono riuscito a risolvere il problema.
Cordiali saluti e buon lavoro a tutti

L'errore è che hai copiato male (tu le chiami prove), non devi ridichiarare le variabili (membri di classe, come precisa nessuno). Non è che object misValue, lo devi mettere prima o dopo le dichiarazioni:

Excel.Application xApp;
Excel.Workbook wb;
Excel.Worksheet ws;

dentro a: private void Form1_Load(object sender, EventArgs e) quelle dichiarzioni non ci devono essere per niente.
Come ti avevo fatto vedere sul codice d'esempio, sul pogetto che ti ho inviato e in ultimo ti ho ripostato il codice che avevi copiato male dove ti ho remmato le righe che non dovevi mettere.
Ultima modifica effettuata da Carlo 02/04 21:42
in programmazione tutto è permesso
04/05 16:10
Totino1956
Ho scaricato dal sito ExcelTraForm, una procedura che consente da Visual Studio C# di
leggere e scrivere un file Excel con l'impostazione
using Excel = Microsoft.Office.Interop.Excel che funziona.
Ma se provo a utilizzare l'impostazione:
using Excel = Microsoft.Office.Interop.Excel
su un nuovo progetto Visual Studio mi da errore dichiarando che Office è sconosciuto
nello spazio dei nomi e manca un riferimento all'Assembly.
Ho provato con la versione 2017 e 2022 ma permane l'errore,
mentre ExcelTraForm funziona sempre!
C'è un correttivo che potreste segnalarmi?
Grazie!!!
Totino






aaa
04/05 18:16
Ma cosa c'entra questo tuo post qui Totino?

Un minimo di regolamento lo vogliamo seguire?

Dovresti aprire una tua NUOVA discussione con OPPORTUNO titolo e non accodarti ad altre.

Fatto questo sicuramente potresti avere una facile risposta al tuo quesito.
Ultima modifica effettuata da 04/05 18:27