zoukankan      html  css  js  c++  java
  • 关于报错:The Microsoft.ACE. Oledb.12.0 provider was not registered on the local computer

    错误描述The Microsoft.ACE. Oledb.12.0 provider was not registered on the local computer

    最近在Web项目中做一个自动生成Excel→下载→修改→上传→生成json格式文件的功能。

    本地一切都顺利,在部署到IIS服务器后,运行发现挂了。

    本人代码:

     1  #region 读取Excel中的数据
     2         /// <summary> 
     3         /// 读取Excel中的数据 支持表头(.xlsx)   不支持表头(.xls)  
     4         /// </summary> 
     5         /// <param name="fileName">Excel文件路径</param> 
     6         /// <returns>Excel中的数据</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             try
    15             {
    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//.xlsx
    20                     connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
    21                 // 创建连接对象
    22                 Conn = new OleDbConnection(connString);
    23                 // 打开数据库连接 
    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             finally
    46             {
    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

    ......

    ......

    在我各种查阅,对比,实践后把解决方法记录下来,和大家分享:

    报错原因是本地安装了Office客户端,但是服务器没有安装Office客户端

    我们都知道,安装一个Office客户端是需要占一些内存的,这不利于服务器的性能。

    所以我就查询了资料,结合实践,有了不安装Office客户端也能读取Excel的解决办法。

    解决办法:

            第一步:安装数据访问组件:(AccessDatabaseEngine)

      1)适用于office2007的Access组件

      Microsoft Access Database Engine 2007 Office system 驱动程序:数据连接组件

      2)适用于office2010的Access组件

      Microsoft Access Database Engine 2010 Redistributable
     

           下载安装后电脑里便会有一组组件,非 Microsoft Office 应用程序可以使用它们从 2007/2010 Office system 文件中读取数据,

           例如:

                   1)从 Microsoft Office Access 2007/2010(mdb 和 accdb)文件中读取数据;

                   2)从Microsoft Office Excel 2007/2010(xls、xlsx 和 xlsb)文件中读取数据。

                   这些组件还支持与 Microsoft Windows SharePoint Services 和文本文件建立连接。

             此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用。

           第二步:打开你所部署项目的电脑的IIS管理器,把你用的那个程序池修改“启用兼容32位应用程序” 属性值为True。

                  如下图所示:

                                  

                  以上方法,亲测有效,如果你遇到类似的问题依旧无法解决,可以查看一下Excel。有的读取Excel的方法分xlxs和xls两种文件。

                       

                  

                  

                 如有更多问题可查看: https://www.cnblogs.com/yifeixue/   或者:http://www.cnblogs.com/willingtolove/

                  

    博学而笃志,切问而近思!
  • 相关阅读:
    【POJ】3243 Clever Y
    【BZOJ】3916: [Baltic2014]friends
    【URAL】1960. Palindromes and Super Abilities
    【BZOJ】3621: 我想那还真是令人高兴啊
    【BZOJ】2286: [Sdoi2011消耗战
    【POJ】2891 Strange Way to Express Integers
    鬼畜的多项式
    【CF】438E. The Child and Binary Tree
    【BZOJ】3456: 城市规划
    【POJ】1811 Prime Test
  • 原文地址:https://www.cnblogs.com/yifeixue/p/11283944.html
Copyright © 2011-2022 走看看