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/

                  

    博学而笃志,切问而近思!
  • 相关阅读:
    Leetcode Excel Sheet Column Number
    AlgorithmsI PA2: Randomized Queues and Deques Subset
    AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
    AlgorithmsI PA2: Randomized Queues and Deques Deque
    AlgorithmsI Programming Assignment 1: PercolationStats.java
    hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
    hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
    hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
    hdu多校第三场 1007 (hdu6609) Find the answer 线段树
    hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测
  • 原文地址:https://www.cnblogs.com/yifeixue/p/11283944.html
Copyright © 2011-2022 走看看