Office 开发系列:ASP.Net调用Excel组件错误的问题解决

最近一直在做数据录入,要Excel中的数据导入到数据库中,由于数据量太大,弄了个小程序,在调Excel组件的时候出了一点问题,在网上搜到了解决办法,记录一下。

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}"ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。

要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。


具体解决方法如下:
1:在服务器上安装office的Excel软件.
2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应 用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加 一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.
这样,我们便配置好了相应的Excel的DCOM权限. 注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户 由于EXCEL是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,
然后再传递给客户端的方法,最后每次调 用这个功能的时候再删除以前在服务器上所生成的所有Excel

 

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

操作系统:Windows Server 2008 64位企业版
数据库:SqlServer 2005 64位企业版
环境:SqlServer 2005 SSIS package

在SSIS的package中读取.xlsx文件,因为SQL SERVER 2005不支持直接读取此类文件,所以采取用'Microsoft.ACE.OLEDB.12.0来读取,包执行中提示错误:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
即:(未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序)

其中AccessDatabaseEngine.exe正确默认安装。
在产品服务器上环境相同,包的执行正确,这个服务器是我自己新建的,不知道哪里设置有问题。

在JOB中调用package的时候,我的确是用的DTExec.exe这个工具,但我用的是默认的x64的。
看了您的建议以后我改用x86的DTExec,可以成功。
再次感谢!

现在我将此问题总结一下:



1.在用SQL SERVER 2005访问.xlsx文件(office2007&2010文件格式)时,必须用
provider 'Microsoft.ACE.OLEDB.12.0' 来实现。
2.首先要安装AccessDatabaseEngine.exe。
下载路径:http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en
3.在32位系统中可以在数据库中看见这个provider。
4.在64位系统中不能看见它,这时需调用
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
来执行package。

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

a、创建Asp.net WebService application 程序,并通过WebService来连接访问Excel

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

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

 


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

a、创建Asp.net WebService application 程序,并通过WebService来连接访问Excel

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

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

 

 

 

你可能感兴趣的:(Office 开发系列:ASP.Net调用Excel组件错误的问题解决)