錯(cuò)誤描述:The Microsoft.ACE. Oledb.12.0 provider was not registered on the local computer 最近在Web項(xiàng)目中做一個(gè)自動(dòng)生成Excel→下載→修改→上傳→生成json格式文件的功能,。 本地一切都順利,在部署到IIS服務(wù)器后,,運(yùn)行發(fā)現(xiàn)掛了,。 本人代碼: 1 #region 讀取Excel中的數(shù)據(jù) 2 /// <summary> 3 /// 讀取Excel中的數(shù)據(jù) 支持表頭(.xlsx) 不支持表頭(.xls) 4 /// </summary> 5 /// <param name="fileName">Excel文件路徑</param> 6 /// <returns>Excel中的數(shù)據(jù)</returns> 7 public DataTable GetTable(string fileName) 8 { 9 OleDbConnection Conn = null;10 DataTable dt = null;11 string connString = string.Empty;12 OleDbDataAdapter da = new OleDbDataAdapter();13 DataTable dataTable = new DataTable();14 try15 {16 string FileType = fileName.Substring(fileName.LastIndexOf("."));17 if (FileType == ".xls")18 connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";19 else//.xlsx20 connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";21 // 創(chuàng)建連接對(duì)象22 Conn = new OleDbConnection(connString);23 // 打開數(shù)據(jù)庫連接 24 Conn.Open();25 //獲取Excel工作薄中Sheet頁(工作表)名集合26 DataTable ss = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });27 string sql_F = "Select * FROM [{0}]";28 for (int i = 0; i < ss.Rows.Count; i++)29 {30 da.SelectCommand = new OleDbCommand(String.Format(sql_F, ss.Rows[i][2].ToString()), Conn);31 da.Fill(dataTable);32 }33 return dataTable;34 }35 catch (Exception ex)36 {37 string Error = ErrorUtil.GetError(ex);38 39 if (log.IsDebugEnabled)40 {41 log.Debug("GenerateFinfo - Error2 : [" + Error + "]");42 }43 throw (ex);44 }45 finally46 {47 // 釋放 48 if (Conn != null)49 {50 Conn.Close();51 Conn.Dispose();52 }53 if (dt != null)54 {55 dt.Dispose();56 }57 }58 }59 #endregion ...... ...... 在我各種查閱,對(duì)比,,實(shí)踐后把解決方法記錄下來,和大家分享: 報(bào)錯(cuò)原因是本地安裝了Office客戶端,,但是服務(wù)器沒有安裝Office客戶端,。 我們都知道,安裝一個(gè)Office客戶端是需要占一些內(nèi)存的,,這不利于服務(wù)器的性能,。 所以我就查詢了資料,結(jié)合實(shí)踐,,有了不安裝Office客戶端也能讀取Excel的解決辦法,。
解決辦法: 第一步:安裝數(shù)據(jù)訪問組件:(AccessDatabaseEngine)1)適用于office2007的Access組件 Microsoft Access Database Engine 2007 Office system 驅(qū)動(dòng)程序:數(shù)據(jù)連接組件 2)適用于office2010的Access組件 Microsoft Access Database Engine 2010 Redistributable 下載安裝后電腦里便會(huì)有一組組件,非 Microsoft Office 應(yīng)用程序可以使用它們從 2007/2010 Office system 文件中讀取數(shù)據(jù),, 例如: 1)從 Microsoft Office Access 2007/2010(mdb 和 accdb)文件中讀取數(shù)據(jù),; 2)從Microsoft Office Excel 2007/2010(xls、xlsx 和 xlsb)文件中讀取數(shù)據(jù),。 這些組件還支持與 Microsoft Windows SharePoint Services 和文本文件建立連接,。 此外,還會(huì)安裝 ODBC 和 OLEDB 驅(qū)動(dòng)程序,,供應(yīng)用程序開發(fā)人員在開發(fā)與 Office 文件格式連接的應(yīng)用程序時(shí)使用,。
第二步:打開你所部署項(xiàng)目的電腦的IIS管理器,把你用的那個(gè)程序池修改“啟用兼容32位應(yīng)用程序” 屬性值為True,。如下圖所示:
以上方法,,親測有效,,如果你遇到類似的問題依舊無法解決,可以查看一下Excel,。有的讀取Excel的方法分xlxs和xls兩種文件,。
|
|