Come importare dati da una colonna di Excel in listbox usando C #

Ho uno strumento openFileDialog. Sceglierò un file excel dal mio computer e il mio programma leggerà una colonna (ad esempio una colonna) e scriverò la mia listbox sulla GUI. Come posso farlo via OleDB? Sono nuovo al C #. Se spieghi dettagliatamente, sarò felice per quello. Grazie per l’aiuto.

Per utilizzare correttamente il provider OLEDB dobbiamo considerare alcuni punti.

  • Il provider OLEDB per i file Excel 2003 è diverso da quello utilizzato per i file Excel 2007/2010. Quindi, la prima cosa che dobbiamo fare è determinare il formato del file Excel per selezionare il fornitore corretto. Nell’esempio di codice seguente, è sufficiente controllare l’estensione del file per determinare il formato del file Excel. Si noti che esistono metodi più elaborati per determinare il formato del file Excel (ad esempio tramite i byte magici).

  • Per selezionare tutte le righe di un foglio Excel è necessario conoscere il nome del foglio Excel. I nomi dei fogli standard dipendono dalla lingua e potrebbero essere rinominati dall’utente. Quindi, abbiamo bisogno di un modo per determinare il nome dei fogli inclusi in un file Excel per essere indipendenti dalla lingua (e ovviamente indipendente dai fogli rinominati). Fortunatamente, la class OleDbConnection fornisce un metodo chiamato GetOleDbSchemaTable che ci consente di ottenere tutti i nomi dei fogli in un file Excel.

  • Il provider OLEDB per Excel supporta una proprietà estesa denominata HDR. Impostando HDR su Yes significa che la prima riga di un foglio contiene i titoli delle colonne. Quindi, se usi i titoli delle colonne dovresti impostare HDR=Yes .

Quindi, per riepilogare il codice di esempio riportato di seguito, procedi nel modo seguente (al clic del pulsante):

  1. Determina il tipo di file Excel in base all’estensione del file.
  2. Seleziona il provider OLEDB corretto in base al tipo di file Excel per creare la stringa di connessione.
  3. Determina i nomi dei fogli inclusi nel file Excel.
  4. Seleziona il primo foglio, seleziona tutte le righe e archivia le righe in un DataTable chiamato mytable .
  5. Visualizza tutti i valori della prima colonna in una listbox chiamata listbox1 .

Esempio di codice:

 private static bool IsExcelXmlFileFormat(string fileName) { return fileName.EndsWith("xlsx", StringComparison.OrdinalIgnoreCase); } private void button1_Click(object sender, EventArgs e) { // Open your FileOpenDialog and let the user select a file... string fileName = "c:\\temp\\myexcelfile.xlsx"; OleDbConnectionStringBuilder connStringBuilder = new OleDbConnectionStringBuilder(); connStringBuilder.DataSource = fileName; if (IsExcelXmlFileFormat(fileName)) { // Set HDR=Yes if first row contains column titles. connStringBuilder.Provider = "Microsoft.ACE.OLEDB.12.0"; connStringBuilder.Add("Extended Properties", "Excel 8.0;HDR=NO;"); } else { connStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0"; connStringBuilder.Add("Extended Properties", "Excel 8.0;"); } DataSet data = new DataSet(); using (OleDbConnection dbConn = new OleDbConnection(connStringBuilder.ConnectionString)) { dbConn.Open(); DataTable sheets = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); using (OleDbCommand selectCmd = new OleDbCommand( String.Format("SELECT * FROM [{0}]", sheets.Rows[0]["TABLE_NAME"]), dbConn)) { using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter()) { dbAdapter.SelectCommand = selectCmd; dbAdapter.Fill(data, "mytable"); } } } // To enumerate all rows use the following code. // foreach (DataRow row in data.Tables["mytable"].Rows) // { // Console.Out.WriteLine(row[0]); // } // Display the values of column 0 in a listbox called listBox1. listBox1.ValueMember = data.Tables["mytable"].Columns[0].ColumnName; listBox1.DisplayMember = data.Tables["mytable"].Columns[0].ColumnName; listBox1.DataSource = data.Tables["mytable"]; }