把Excel做爲數據庫,讀到DataTable中,Excel科學計數法數字轉字符串

須要引用:using System.Data.OleDb;ide

/// <summary>
        /// 獲取Excel數據,包含全部sheet
        /// </summary>
        /// <param name="fullPath"></param>
        /// <returns></returns>
        public DataSet GetExcelTables(string fullPath)
        {
            DataSet ds = new DataSet();
            if (File.Exists(fullPath))
            {
                //HDR=No 第一行就是數據
                string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fullPath + ";Extended Properties='Excel 12.0;HDR=No;IMEX=1;'";
                using (OleDbConnection conn = new OleDbConnection(strConn))
                {
                    conn.Open();
                    foreach (DataRow item in conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows)
                    {
                        string tableName = item[2].ToString().Trim();
                        DataTable dt = new DataTable();
                        dt.TableName = tableName;
                        OleDbDataAdapter odda = new OleDbDataAdapter("select * from [" + tableName + "]", conn);
                        odda.Fill(dt);
                        ds.Tables.Add(dt);
                    }
                }
            }
            return ds;
        }

Excel有兩種格式:.xls(office2003) 和 .xlsx(office2007),xlsx須要用12.0的驅動,ui

下載地址:http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exespa

.xlsx(office2007)鏈接字符串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=表格絕對路徑;Extended Properties='Excel 12.0;HDR=No;IMEX=1;'code

.xls(office2003)鏈接字符串:Provider=Microsoft.Jet.Oledb.4.0;Data Source=表格絕對路徑;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'blog

說明:HDR=No,意思是表格中的第一行就是數據,不是表頭,系統會自動生成列;HDR=Yes,意思是表格中的第一行是表頭,系統會把第一行當作DataTable的列名。字符串

當 IMEX=0 時爲「匯出模式」,這個模式開啓的 Excel 檔案只能用來作「寫入」用途。
當 IMEX=1 時爲「匯入模式」,這個模式開啓的 Excel 檔案只能用來作「讀取」用途。
當 IMEX=2 時爲「連結模式」,這個模式開啓的 Excel 檔案可同時支援「讀取」與「寫入」用途。
特別注意:IMEX=1的時候,讀取Excel的時候會把科學計數法的數字自動轉字符串,我就被這個地方坑了一下,致使我老是讀不到對的數據。

string

相關文章
相關標籤/搜索