Post nato da una discussione su forum. Per recuperare i nomi degi fogli di lavoro di un file excel, al fine di popolare ( ad esempio) un controllo ComboBox, possiamo sfruttare la funzione GetOleDbSchemaTable della classe OleDbConnection, la quale, restituisce un istanza di oggetto DataTable con le informazioni a noi necessarie. Il codice per popolare il ComboBox è il seguente:
1 DataTable dt = GetWorksheetList(@"C:\Test.xls");
2 if (dt != null)
3 {
4 comboBox1.DisplayMember = "TABLE_NAME";
5 comboBox1.DataSource = dt;
6 }
mentre la funzione GetWorksheetList è la seguente:
1 private DataTable GetWorksheetList(string pathAndFileName)
2 {
3 DataTable workSheetsDataTable = null ;
4 5 using (OleDbConnection connection = new OleDbConnection())
6 {
7 string connectionString = string.Format(
8 @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;",
9 pathAndFileName );
10 11 connection.ConnectionString = connectionString;
12 13 try 14 {
15 connection.Open();
16 17 workSheetsDataTable= connection.GetOleDbSchemaTable(
18 System.Data.OleDb.OleDbSchemaGuid.Tables ,
19 new object[] { null, null, null, "TABLE" });
20 21 connection.Close();
22 }
23 catch (Exception ex)
24 {
25 26 MessageBox.Show("Attenzione:" + ex.Message);
27 }
28 }
29 return workSheetsDataTable ;
30 }