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表名改了就是報(bào)下面的錯(cuò):
'sheet1$' 不是一個(gè)有效名稱。請(qǐng)確認(rèn)它不包含無(wú)效的字符或標(biāo)點(diǎn),且名稱不太長(zhǎng)。
那么怎樣才能獲得Excel中各個(gè)sheet的名稱呢?這樣就能動(dòng)態(tài)的選中返回哪個(gè)sheet的數(shù)據(jù),即使用戶更改了名稱也不怕,完全可以把所有sheet的名稱列出來(lái)供用戶選擇:
那么下面就把解決問(wèn)題的代碼列出來(lái),主要用到了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),包括各個(gè)sheet表的名稱,類型,創(chuàng)建時(shí)間和修改時(shí)間等
- DataTable dtSheetName = conn.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
- //包含excel中表名的字符串?dāng)?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ù),可先把所有表明列出來(lái)供用戶選擇
- string strExcel = "select * from [" + strTableNames[0] + "]";
- myCommand = new OleDbDataAdapter(strExcel, strConn);
- dt = new DataTable();
- myCommand.Fill(dt);
- dataGridView1.DataSource = dt; //綁定到界面
- }
以上就介紹了C#讀取Excel中指定的Sheet名稱或索引的實(shí)現(xiàn)方法。
【編輯推薦】