asp.net 操做excel的一系列问题(未完待续)

最近在处理exel的一些东西,遇到了不少问题,如今就在此将问题和网上找到的解决办法html

1.外部表不是预期格式错误web

  

错误通过:在读取Excel时,出现外部表不是预期的格式
错误缘由1: 因为 Excel  97-2003的链接格式与 Excel  2010 的 不一样形成。
如下是从网上摘抄原文

Excel “External table is not in the expected format.” .sql

Question:数据库

I'm trying to read an Excel (xlsx) file using the code shown below. I get an "External table is not in the expected format." error unless I have the file already open in Excel. In other words, I have to open the file in Excel first before I can read if from my C# program. The xlsx file is on a share on our network. How can I read the file without having to open it first? Thankswindows

string sql = "SELECT * FROM [Sheet1$]";  string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=/"Excel 8.0;HDR=YES;IMEX=1;/"";    using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {  DataSet ds = new DataSet();  adaptor.Fill(ds);  }  服务器

Answers:架构

"External table is not in the expected format." typically occurs when trying to use an Excel 2007 file with a connection string that uses: Microsoft.Jet.OLEDB.4.0 and Extended Properties=Excel 8.0app

Using the following connection string seems to fix most problems.less


public static string path = @"C:/src/RedirectApplication/RedirectApplication/301s.xlsx";  public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
以上出处:http://blog.csdn.net/ldl22847/article/details/6322339ide

解决方案1:

不少人换了2010后,问的最多的问题之一是2003里最经典的ADO中的“provider=Microsoft.Jet.OLEDB.4.0”这句怎么不能用了。

百度一下能够了解到,Microsoft.Jet.OLEDB.4.0是Microsoft Jet引擎,这适用于2003版本(2003以前的我没装,因此也不知道能向下适应到哪一个版本),而在2007中,微软对其旗下 Access 与 Excel 的主要文件格式进行修改,而且重命名为 .accdb(Access 2007 数据库文件)与 .xlsx(Excel 2007 文件),所以未被 Microsoft Jet 引擎所支持,不过微软也很快的提出了Microsoft Office 2007 Desktop Drivers: Data Connectivity Components 来支持,目前的解决方法就是把链接字符串中的数据提供者改成Microsoft.ACE.OLEDB.12.0

总上所述:

//2003(Microsoft.Jet.Oledb.4.0)
string strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath);

//2010(Microsoft.ACE.OLEDB.12.0)
string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath);

因为个人本地试验机上安装的是office2013,因此出这个问题
2.

其实,这种错误的可能性有几种,好比:

1.没有安装数据访问组件,须要安装相应版本的数据访问组件;

2.没有安装相应版本的Office客户端,须要安装相应版本的Office客户端;

3.Microsoft.Jet.OLEDB.4.0 在64位系统上不支持,须要修改架构,从x64改成x86,不管是WinForm仍是ASP.NET;或者修改链接字符串为 Microsoft.ACE.OLEDB.12.0而且安装AccessDatabaseEngine x64数据访问组件;

4.没有在IIS应用程序池配置默认属性,须要在相应的IIS应用程序池启用32位应用程序;

下面是我收集整理的一些解决方案。

 

 

【错误】:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中致使错误的出处的详细信息。 
异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

下载Microsoft 2007 Office System 驱动程序:数据链接组件安装

http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe

概述

此下载将安装一组组件,非 Microsoft Office 应用程序可使用它们从 2007 Office system 文件中读取数据,例如从 Microsoft Office Access 2007(mdb 和 accdb)文件以及 Microsoft Office Excel 2007(xls、xlsx 和 xlsb)文件中读取数据。这些组件还支持与 Microsoft Windows SharePoint Services 和文本文件创建链接。
此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式链接的应用程序时使用。

系统要求

支持的操做系统: Windows Server 2003 Service Pack 1, Windows Vista, Windows XP Service Pack 2

    • 此下载适用于如下 Office 程序:
      • 2007 Microsoft Office system
使用此下载:
  1. 若是您是应用程序用户,请查阅应用程序文档以得到有关如何使用相应的驱动程序的详细信息。
  2. 若是您是使用 OLEDB 的应用程序开发人员,请将 ConnectionString 属性的 Provider 参数设置为“Microsoft.ACE.OLEDB.12.0”若是您是使用 ODBC 链接到 Microsoft Office Access 数据的应用程序开发人员,请将链接字符串设置为“Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=path to mdb/accdb file”
    • 若是要链接到 Microsoft Office Excel 数据,请将“Excel 12.0”添加到 OLEDB 链接字符串的扩展属性中。
  3. 若是您是使用 ODBC 链接到 Microsoft Office Excel 数据的应用程序开发人员,请将链接字符串设置为“Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=path to xls/xlsx/xlsm/xlsb file”

详情与下载:
Microsoft Access Database Engine 2007 Office system 驱动程序:数据链接组件
 
Microsoft Access Database Engine 2010 Redistributable
 

 

 
【错误】:访问Excel 2007 出错,未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
 
场景描述:

windows 2008 r2 x64版本的操做系统中经过oledb提供程序链接访问Excel2007/2003时,程序会报以下错误:

System.InvalidOperationException: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.

此查找资料认为产生此种错误的缘由有两种:

一、在Windows2008r2 x64 OS,在没有装Office2007客户端时,或没有安装“数据链接组件”

二、当前Web应用程序的应用程序池是64位的Sharepoint应用程序池下时,由于提供链接Excelprovider不支持当前64版本的操做系统

解决方案:

方案1:

安装MS的数据链接组件AccessDatabaseEngine(或安装office 2007客户端),并将当前承载经过oledb提供程序去访问Excel2007Web application对应的应用程序池“启用兼容32位应用程序”,

在对应的 IIS 应用程序池中,“设置应用程序池默认属性”右击/“高级设置”/"启用32位应用程序",设置为 true

方案2:

安装AccessDatabaseEngine_64版而且要安装64位版的office 2010客户端

方案3:

若目标应用程序不能将应用程序池"启用兼容32位应用程序",只能在64位应用程序池下运行,且又想有上传Excel的功能,可按以下方式:

a、建立Asp.net WebService application 程序,并经过WebService来链接访问Excel

b、将此webservice application的应用程序池按方案1方式设置“启用兼容32位应用程序”。

c、在目标应用程序中添加此webservice

 

本文来自cnblogs:http://www.cnblogs.com/q149072205/archive/2012/03/29/2423323.html

 

 
【错误】:“/”应用程序中的服务器错误 未在本地计算机上注册“microsoft.Jet.oledb.4.0”提供程序。

今天我把系统换成了64位版的Windows7,结果配完IIS打开网站测试的时候,顿时菊花一紧:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。

 

查了半天发现是IIS跑在64位环境下引发的。而64位下,是木有Access数据库的驱动的(包括Excel也不行)。

解决办法是:在目标网站的应用程序池中选择高级设置,而后将启用32位应用程序设置为true,重启IIS便可!

 

因为项目尚未结束,暂时先记录这些,等后来遇到问题再来补充

相关文章
相关标签/搜索