{
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;
}
但是上面的代碼只是查詢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中表名的字符串?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ù),可先把所有表明列出來供用戶選擇
string strExcel = "select * from [" + strTableNames[0] + "]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
dt = new DataTable();
myCommand.Fill(dt);
dataGridView1.DataSource = dt; //綁定到界面
}
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
