{
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表名改了就是報(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; //綁定到界面
}
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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