2012-07-10 55 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

相關問題