1. 程式人生 > >用OLEDB的GetOleDbSchemaTable方法獲取EXCEL的Sheet列表

用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);

            // ......

}