转载+整理:在部署时使用Excel .NET运行库导出Excel遇到问题及解决办法

    最近做了一个使用Excel .NET运行库导出Excel的小程序,在Win2003+Office 2003环境中,出现两个问题,Google+Baidu后解决了这两个问题。在此记录下,与大家分享,希望遇到相似问题能够有所借鉴。

    使用Microsoft.Office.Interop.Excel运行库文件,并将运行库作为组件在服务器部署后,初次运行出现以下错误:

    检索 COM 类工厂中 CLSID {00024500-0000-0000-C000-000000000046} 的组件时失败

   转载网络解决方法:

1:在服务器上安装office的Excel软件。
2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 。
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"。
4:在"DCOM配置"中找到"Microsoft  Excel应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel应用程序属性"对话框。
5:点击"标识"标签,选择"交互式用户"。
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一"NETWORK  SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限。
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK  SERVICE"用户,然后赋予"本地访问"权限。

    总得来说,就是在服务器环境中将Microsoft  Excel应用程序设为本地可被激活调用,通过这一设置后NETWORK SERVICE用户就可以自行调用OFFICE Excel进行处理。这里再记录一下其他错误可能的处理的方法,在我的项目中没有验证。

8.如果交互式用户设置后出现错误8000401a,可取消交互式用户,指定为administratr,可暂时解决此问题。进一步的解决方式还有待探讨。  
9.采用第8点的设置后,打开Excel可能会出现“无法使用对象引用或链接”,并且不能进行单元格粘贴。原因不明,取消设置后即可消失。  

另外说明:光按以上设置并不能完全保证不出问题,因为调用OFFICE的操作可能涉及其他的系统资源,很可能依然权限不够而导致问题,只是设置EXCEL应用程序后,还是可能会报80070005的错误,最保险的是应该在dcomcnfg中选中我的电脑然后右键属性->com安全,将里面的访问权限,启动和激活权限全都编辑默认,在当中加上network service(iis 5.0的话,要加的是asp.net用户),并如前面对networkservice设置上相同的权限,这样基本上能保证不会再出什么问题。

以上为基本出路方法,但是我也遇到过应用以上方法还是报错的情况,我的环境是windows2003 + office2003+office2007,在测试服务器上都可以导出无任何问题!但是更新了正式环境就是报错,权限都设置了还是报错,因为我的测试服务器是默认office启动的,所以我怀疑是office版本环境问题!于是我卸载了office2007,马上测试ok了,但是重启服务器后就产生了have not been Pre-compiled错误,导出页面都无法打开了,于是我又重新安装了office2007,页面可以打开了,但是导出excel时又开始报错!我又把所有的权限重新设置一遍,问题依旧!后来发现两个服务器默认打开excel的程序不一样,测试环境是默认office2003打开,正式环境是office2007打开,于是我在正式环境重新注册office2003,使其同样也是默认office2003打开程序,问题终于解决了!!!

注册方法 执行    开始----运行----输入excel2003的安装路径,例如 "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" /regserver    注意/符号前面有一个空格,其中"C:\Program Files\Microsoft Office\OFFICE11\excel.exe" 是excel2003的安装程序的路径,参数regserver表示注册的意思!
运行后,会启动Office 2003的安装程序,进行修复,重新注册。
excel2007为默认的启动程序的方法类同,可以执行   开始----运行----"D:\Program Files\Microsoft Office\Office12\excel.exe" /regserver

解决了COM类调用问题后,系统运行时出现生成Excel失败的情况。通过查询ex.Message得知错误为

HRESULT:0x800A03EC

我开始怀疑是DLL运行库版本问题,因为Microsoft.Office.Interop.Excel运行库在VS中目前有4个版本,11,12,13均为.NET 1.1版本,而VS2010所携带的14为2.0版本。如此说来我们用的Office 2003,2007都是用.net v1.1开发的,Office 2010使用.net v2.0开发的。但是百度下后,还是通过Excel调用的文件类型解决了。

导致错误的原因是SaveAs中的参数Excel.XlFileFormat,此参数的指示程序将文档以特定格式保存。将此参数改成Excel.XlFileFormat.xlWorkbookNormal就不再报错了。可能我开发环境是Office 2007,服务器环境是Office 2003,在文件格式上存在兼容性问题。xlWorkbookNormal类型其实就是调用Excel的默认模板,在开发和运行环境中均调试通过。

 

    

posted @ 2012-04-18 20:14  GarField_shz  Views(560)  Comments(0Edit  收藏  举报