2012-07-10 73 views
3

我有一个程序,将excel电子表格导入到datagridview。我写的代码如下:导入到DataGridView的任何Excel电子表格 - C#

try 
       { 
        OleDbConnectionStringBuilder connStringBuilder = new OleDbConnectionStringBuilder(); 
        connStringBuilder.DataSource = file; 
        connStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0"; 
        connStringBuilder.Add("Extended Properties", "Excel 8.0;HDR=NO;IMEX1"); 

        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb"); 

        DbDataAdapter adapter = factory.CreateDataAdapter(); 

        DbCommand selectCommand = factory.CreateCommand(); 
        selectCommand.CommandText = "SELECT * FROM [All Carpets to Excel$]"; 

        DbConnection connection = factory.CreateConnection(); 
        connection.ConnectionString = connStringBuilder.ConnectionString; 

        selectCommand.Connection = connection; 

        adapter.SelectCommand = selectCommand; 

        data = new DataSet(); 

        adapter.Fill(data); 

        dataGridView1.DataSource = data.Tables[0].DefaultView; 

       } 
       catch (IOException) 
       { 

       } 

行 “selectCommand.CommandText = ”SELECT * FROM [所有地毯到Excel $]“;”从该表中获取具有该名称的数据。我想知道如何让这个程序打开任何工作表名称的Excel文档。一个我可能不知道的。

在此先感谢!

回答

2

你可以得到所有的表的名字,像这样..

public string[] GetExcelSheetNames(string excelFileName) 
{ 
     OleDbConnection con = null; 
     DataTable dt = null; 
     String conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFileName + ";Extended Properties=Excel 8.0;"; 
     con= new OleDbConnection(conStr); 
     con.Open(); 
     dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

     if (dt == null) 
     { 
      return null; 
     } 

     String[] excelSheetNames = new String[dt.Rows.Count]; 
     int i = 0; 

     foreach (DataRow row in dt.Rows) 
     { 
      excelSheetNames[i] = row["TABLE_NAME"].ToString(); 
      i++; 
     } 

     return excelSheetNames; 
} 
+0

我尝试使用它,它似乎这个返回一个空字符串数组... – 2012-07-10 16:42:36

+0

Excel文件有多个表虽然。 – 2012-07-10 16:44:17

+0

我认为这可能是“foreach”声明。 – 2012-07-10 16:47:59