在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近在处理exel的一些东西,遇到了很多问题,现在就在此将问题和网上找到的解决办法 1.外部表不是预期格式错误
错误经过:在读取Excel时,出现外部表不是预期的格式
错误原因1: 由于Excel 97-2003的连接格式与Excel 2010 的 不同造成。
以下是从网上摘抄原文
Excel “External table is not in the expected format.” . 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? Thanks 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.0 Using the following connection string seems to fix most problems.
解决方案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) //2010(Microsoft.ACE.OLEDB.12.0) 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 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 下载Microsoft 2007 Office System 驱动程序:数据连接组件安装 概述此下载将安装一组组件,非 Microsoft Office 应用程序可以使用它们从 2007 Office system 文件中读取数据,例如从 Microsoft Office Access 2007(mdb 和 accdb)文件以及 Microsoft Office Excel 2007(xls、xlsx 和 xlsb)文件中读取数据。这些组件还支持与 Microsoft Windows SharePoint Services 和文本文件建立连接。 系统要求支持的操作系统: Windows Server 2003 Service Pack 1, Windows Vista, Windows XP Service Pack 2
使用此下载:
详情与下载: 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. 此查找资料认为产生此种错误的原因有两种: 1、在Windows2008r2 x64 OS,在没有装Office2007客户端时,或没有安装“数据连接组件” 2、当前Web应用程序的应用程序池是64位的Sharepoint应用程序池下时,因为提供连接Excel的provider不支持当前64版本的操作系统 解决方案: 方案1: 安装MS的数据连接组件AccessDatabaseEngine(或安装office 2007客户端),并将当前承载通过oledb提供程序去访问Excel2007的Web 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即可!
由于项目还没有结束,暂时先记录这些,等后来遇到问题再来补充 |
请发表评论