C#讀取Excel技巧:讀取指定sheet名稱或索引
C#讀取Excel中指定的Sheet名稱或索引
- public DataTable ExcelToDS(string Path)
- {
- string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
- OleDbConnection conn = new OleDbConnection(strConn);
- conn.Open();
- string strExcel = "";
- OleDbDataAdapter myCommand = null;
- DataTable dt = null;
- strExcel = "select * from [sheet1$]";
- myCommand = new OleDbDataAdapter(strExcel, strConn);
- dt = new DataTable();
- myCommand.Fill(dt);
- return dt;
- }
C#讀取Excel技巧:文件名變更處理
但是上面的代碼只是查詢sheet1$表,如果用戶把sheet表名改了就是報下面的錯:
'sheet1$' 不是一個有效名稱。請確認它不包含無效的字符或標點,且名稱不太長。
那么怎樣才能獲得Excel中各個sheet的名稱呢?這樣就能動態(tài)的選中返回哪個sheet的數(shù)據(jù),即使用戶更改了名稱也不怕,完全可以把所有sheet的名稱列出來供用戶選擇:
那么下面就把解決問題的代碼列出來,主要用到了OleDbConnection.GetOleDbSchemaTable()方法
- /// < summary>
- /// 根據(jù)excel的文件的路徑提取其中表的數(shù)據(jù)
- /// < /summary>
- /// < param name="Path">Excel文件的路徑< /param>
- private void GetDataFromExcelWithAppointSheetName(string Path)
- {
- //連接串
- string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
- OleDbConnection conn = new OleDbConnection(strConn);
- conn.Open();
- //返回Excel的架構(gòu),包括各個sheet表的名稱,類型,創(chuàng)建時間和修改時間等
- DataTable dtSheetName = conn.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
- //包含excel中表名的字符串數(shù)組
- string[] strTableNames = new string[dtSheetName.Rows.Count];
- for (int k = 0; k < dtSheetName.Rows.Count; k++)
- {
- strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
- }
- OleDbDataAdapter myCommand = null;
- DataTable dt = new DataTable();
- //從指定的表明查詢數(shù)據(jù),可先把所有表明列出來供用戶選擇
- string strExcel = "select * from [" + strTableNames[0] + "]";
- myCommand = new OleDbDataAdapter(strExcel, strConn);
- dt = new DataTable();
- myCommand.Fill(dt);
- dataGridView1.DataSource = dt; //綁定到界面
- }
以上就介紹了C#讀取Excel中指定的Sheet名稱或索引的實現(xiàn)方法。
【編輯推薦】