当前位置:软件学习 > Excel >>

Asp.net 中Excel通过模板导出中发布问题

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

说明:

由于导出的Excel模板过于复杂,所以对于导出时采用了直接使用excel控件打开模板,然后填入数据,然后再将文件推送到客户端。

程序测试没有发现问题,但是发布成功之后,客户端却无法访问,这是怎么回事呢?

 

首先我们发现在通过vs调试时却没有问题,所以我们可以推论,程序代码是没有问题的,问题应该是出现在客户端访问服务器的环节。因此可能是权限问题。

在网上查询后发现方法比较一致,如下:

首先安装office2003,安装时注意添加对。net的支持

其次,添加引用到web.config,具体可以到c:\windows\assembly里面查看版本以及公钥标记。

<assemblies>    <add assembly="Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>   </assemblies>

首先修改了一下存放excel文件的文件夹修改权限,然后在组件服务中(运行--dcomcnfg),找到 “Microsoft Excel应用程序”(在注册表里可以看到出问题的CLSID是指向这个组件的),在右键“属性”的“安全”标签中,修改“启动和激活权限”为“自定义”,“编辑”添加Iuser_MachineName --Internet来宾用户(这是由于<identity impersonate="true" />决定的),给与所有权限,“访问权限”的设置同上。然后在“标识”标签里选择“交互式用户”。

 

但是测试之后,问题并没有解决。

 

根据判断,我觉得应该还是权限设置不对,抱着尝试一下的心态,我把标识标签里选择了 下列用户,指定管理员,问题解决了。但是我不确定是否会存在其他潜在安全问题。

 

 

 

附网上的解决方案:


检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 具体解决方法如下:
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
 
解决方法二:
如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:
在web.config中使用身份模拟,在<system.web>节中加入  <identity impersonate="true" userName="你的用户名" password="密码"/>
</system.web>

转自风云blog

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,