rangogni (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/11/2023
|
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 |
|
Carlo (Member)
Guru
Messaggi: 1364
Iscritto: 29/01/2018
|
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:
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 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 il 02/04/2024 alle 12:24
in programmazione tutto è permesso |
|
rangogni (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/11/2023
|
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 |
|
()
Newbie
Messaggi:
Iscritto:
|
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!
|
|
Carlo (Member)
Guru
Messaggi: 1364
Iscritto: 29/01/2018
|
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 il 02/04/2024 alle 23:42
in programmazione tutto è permesso |
|
Totino1956 (Normal User)
Newbie
Messaggi: 2
Iscritto: 04/07/2010
|
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
|
|
()
Newbie
Messaggi:
Iscritto:
|
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 il 04/05/2024 alle 20:27 |
|
Carlo (Member)
Guru
Messaggi: 1364
Iscritto: 29/01/2018
|
Postato originariamente da Totino1956:
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.
|
Per utilizzare il componente COM: Microsoft Office 12.0 Object Library dopo aver aperto un nuovo progetto, vai sulla finestra in alto a destra: Esplora soluzioni, con il tasto destro clicca su: Riferimenti, nel menù che si apre scegli: Aggiungi riferimento; a questo punto si apre una nuova finestra dal titolo Gestione riferimenti - tuoprogramma, scegli a sinistra COM, scorri tutto l'elenco fino a trovare: Microsoft Office 12.0 Object Library (potresti avere una versione diversa), ceccala comunque, clicca Ok e tra i Riferimenti deve apparire: Microsoft.Office.Interop.Excel.
Finito, non dovresti più avere errore..
Se hai ancora problemi apri una tua domanda specifica. Ultima modifica effettuata da Carlo il 05/05/2024 alle 1:39
in programmazione tutto è permesso |
|