用OLEDB的GetOleDbSchemaTable方法獲取EXCEL的Sheet列表
具體方法參考MSDN的GetOleDbSchemaTable方法。 (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable.aspx)
在使用過程中發現取出的Sheet和實際excel不一致, 會多出不少。目前總結後有兩種情況:
1. 取出的名稱中,包括了XL命名管理器中的名稱(參見XL2007的公式--命名管理器, 快捷鍵Crtl+F3);
2. 取出的名稱中,包括了FilterDatabase字尾的, 這是XL用來記錄Filter範圍的, 參見http://www.mrexcel.com/forum/showthread.php?t=27225
對於第一點比較簡單, 刪除已有命名管理器中的內容即可;第二點處理起來比較麻煩, Filter刪除後這些名稱依然保留著,簡單的做法是新增sheet然後將原sheet Copy進去;
我則用C#對取出的名稱做了一下篩選:
foreach(DataRow dr in dt.Rows)
{
// 用下面方法無效的sheet
if (dr[2].ToString().Contains("$") && !dr[2].ToString().EndsWith("$"))
{
continue;
}
string strsql = " SELECT * FROM [" + dr[2].ToString() + "] ";
OleDbDataAdapter adr3 = new OleDbDataAdapter(strsql, oldcn);
DataSet ds = new DataSet();
adr3.Fill(ds);
}