Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C# Win Forms] Leggere Excel a 64 bit
Forum - C# / VB.NET - [C# Win Forms] Leggere Excel a 64 bit

Avatar
carmine (Member)
Pro


Messaggi: 168
Iscritto: 20/04/2010

Segnala al moderatore
Postato alle 20:01
Venerdì, 01/04/2011
Ragazzi ho un problema nel leggere un file excel. Premetto che uso Win 7 64 bit
In pratica ho provato in 2 modi:

il primo leggo il file Con OLEDB:
Codice sorgente - presumibilmente C# / VB.NET

  1. System.Data.OleDb.OleDbConnection MyConnection;
  2.             System.Data.DataSet DtSet;
  3.             System.Data.OleDb.OleDbDataAdapter MyCommand;
  4.             MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='voti.xls';Extended Properties=Excel 8.0;");
  5.             MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [voti$]", MyConnection);
  6.             DtSet = new System.Data.DataSet();
  7.             MyCommand.Fill(DtSet);
  8.             dataGridView1.DataSource = DtSet.Tables[0];
  9.             MyConnection.Close();



l'errore è che non è presente nel computer Microsoft jet oledb 4.0, e non riesco a trovarla da nessuna parte!

il 2 modo leggo con l'aggiunta della classe COM Excel object 11.0:
Codice sorgente - presumibilmente C#

  1. private void readFromExcelFile()
  2.         {
  3.             string path = @"c:/voti.xls";
  4.             ApplicationClass excelApp = new ApplicationClass();
  5.             Workbook myWorkBook;
  6.             Worksheet mySheet;
  7.             Range dataRange = null;
  8.             int i = 0, j = 0;
  9.             try
  10.             {
  11.                 //Apro il foglio
  12.                 myWorkBook = excelApp.Workbooks.Open(path, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
  13.                 mySheet = (Worksheet)myWorkBook.Sheets["voti"]; //Recupero il foglio
  14.        
  15.                 i = 0; //Indici della Grid
  16.                 j = 0;
  17.                 Grid.Columns.Add("a", "a");
  18.                
  19.                 Grid.Rows.Add(mySheet.Rows.Count - 1);
  20.                 int k = 2, h = 1;   //indici row e col excel, riga parte da 3 per mia esigenza
  21.                 for (i = 0; i < mySheet.Rows.Count; i++)    //ciclo righe
  22.                 {
  23.                     h = 1;   //Riazzero colonna excel
  24.                     for (j = 0; j < mySheet.Columns.Count; j++)
  25.                     {
  26.                         Grid.Columns.Add(j.ToString(), j.ToString());  //Aggiungo colonna alla grid
  27.                         dataRange = (Range)mySheet.Cells[k, h];    //recupero la cella excel
  28.                         Grid[j, i].Value = dataRange.Value2.ToString();  // la metto nella Grid
  29.                         h++;  //incremento colonna excel
  30.                     }
  31.  
  32.                    
  33.                     k++; //incremento righe excel
  34.                 }
  35.  
  36.             }
  37.             catch (Exception ex)
  38.             {
  39.                 excelApp.Quit();
  40.                 MessageBox.Show(ex.Message.ToString());
  41.             }
  42.             finally
  43.             {
  44.                 excelApp.Quit();
  45.             }



In questo tutto funziona ma l'inserimento dei dati nella datagridview è molto lento!! ad 1 ad 1 mette i dati. é possibile fare un datasource con i dati prelevati dal worksheet??

Come poxo risolvere?


Computer Science
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:02
Sabato, 02/04/2011
Invece di metterli direttamente in Grid, mettili in un DataTable...


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
carmine (Member)
Pro


Messaggi: 168
Iscritto: 20/04/2010

Segnala al moderatore
Postato alle 12:51
Sabato, 02/04/2011
il punto è che non conosco l'istruzione da range a datatable? potresti farmi un esempio...please


Computer Science
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:26
Lunedì, 04/04/2011
Non esiste nessuna istruzione "da range a datatable". Esiste range ed esiste datatable. Nessuno dei due sa dell'esistenza dell'altro (ed è così che si programma ad oggetti). Se sai come usare il primo e come usare il secondo, non vedo il problema nel copiare dati dall'uno all'altro.
Forse intendevi dire che non sai usare DataTable, ma è molto semplice:
http://totemslair.org/guide/viewchapter.php?guida=vb&id=74
http://www.dotnetperls.com/datatable


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote