IIS下发布关于Excel导入导出时遇到的问题集锦

问题描述

1、Excel每个工作薄(sheet)生成记录行数

2、asp.net关于导出Excel的一些问题的集锦

3、下载失败,临时文件或其所在磁盘不可写

4、未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=14.0.0.0,**

5、IIS下发布操作Excel程序时遇到{00024500-00***即80070005错误

6、System.ComponentModel.Win32Exception: 拒绝访问

有关这这几个问题详解。

问题所在环境

操作系统WIndows Server2003、Windows7

IIS6.*、IIS7.*

需安装软件Office2010

详细解决方案

1、Excel每个工作薄(sheet)生成记录行数

"一个excel文件里最多能放多少条数据?"

 excel 2003()以下 65535 , excel20071,048,576

 

2、asp.net关于导出Excel的一些问题的集锦

a下载不下来:可考虑使用IE自带的下载

b如果使用迅雷,建议先将寻来打开,在进行下载,否则会提示磁盘被占用等的信息

c请设置Templetes/Output/Base下的Excel属性为只读前面的对号去掉

 

3、下载失败,临时文件或其所在磁盘不可写

[解决方案]

C:\Windows下的Temp文件夹修改安全属性Users赋予权限即可解决;可用

或者

尝试将迅雷的安装目录更改:未尝试

4、未能加载文件或程序集“Microsoft.Office.Interop.Excel,Version=14.0.0.0,**

【问题描述】 

未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到指定的文件。

说明执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IO.FileNotFoundException: 未能加载文件或程序集“Microsoft.Office.Interop.Excel,Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到指定的文件。

源错误

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  

程序集加载跟踪下列信息有助于确定程序集“Microsoft.Office.Interop.Excel, Version=14.0.0.0, Culture=neutral,PublicKeyToken=71e9bce111e9429c”无法加载的原因。

【解决方案】

警告程序集绑定日志记录被关闭。

要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1

注意会有一些与程序集绑定失败日志记录关联的性能损失。

要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]

服务器上没有安装Office

提出以后,管理员安装了Office2003(注意安装以后要重启电脑)

按照网上找到的一些方法,

安装:

vstor.exe

下载地址:

http://www.microsoft.com/downloads/details.aspx?FamilyId=8315654B-A5AE-4108-B7FC-186402563F2B&display#filelist

然后下载安装:

O2003PIA.EXE

http://www.microsoft.com/downloads/details.aspx?FamilyId=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&display

之后还是没有解决

然后

在服务器上开始-程序-管理工具-Microsoft .NET Framework 2.0 配置-管理程序集缓存-将程序集添加到程序集缓存。选中那些dll即可。

然而不幸的是还是没有解决。

最后重启IIS 问题解决了。

具体怎么解决的就是以上两个方法之一或两者都必须做到。

我认为一个很重要的问题是

C:\WINDOWS\assembly目录下面必须要有项目的引用。

未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral,PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到指定的文件。

其中的原理是

计算机上缺少了项目引用的Office类文件Interop.Excel.dll

vstor.exeO2003PIA.EXEoffice可重用开发XXX的安装程序。

5、IIS下发布操作Excel程序时遇到{00024500-00***即80070005错误

【问题没描述】英文版

Retrieving the COM class factory forcomponent with CLSID {00024500-0000-0000-C000-000000000046} failed due to thefollowing error: 80070005. 

Description: An unhandled exceptionoccurred during the execution of the current web request. Please review thestack trace for more information about the error and where it originated in thecode. 

Exception Details:System.UnauthorizedAccessException: Retrieving the COM class factory forcomponent with CLSID {00024500-0000-0000-C000-000000000046} failed due to thefollowing error: 80070005. 

ASP.NET is not authorized to access therequested resource. Consider granting access rights to the resource to theASP.NET request identity. ASP.NET has a base process identity (typically{MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if theapplication is not impersonating. If the application is impersonating via<identity impersonate="true"/>, the identity will be theanonymous user (typically IUSR_MACHINENAME) or the authenticated request user. 

 

To grant ASP.NET access to a file,right-click the file in Explorer, choose "Properties" and select theSecurity tab. Click "Add" to add the appropriate user or group.Highlight the ASP.NET account, and check the boxes for the desired access.

【问题描述】中文版

检索 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 帐户,选中所需访问权限对应的框。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

【解决方案1】

1:在服务器上安装officeExcel软件.

2:"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"

3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

4:"DCOM配置"中找到"MicrosoftExcel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 

用程序属性"对话框

5:点击"标识"标签,选择"交互式用户"

6:点击"安全"标签,"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加

一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动""本地激活"权限.

 

7:依然是"安全"标签,"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK

SERVICE"用户,然后赋予"本地访问"权限.

这样,我们便配置好了相应的ExcelDCOM权限.

注意:这是在WIN2003上配置的,2000,xp,NETWORK SERVICE用户改为ASP.net用户

【解决方案】

.NET导出Excel遇到的80070005错误的解决方法:

检索 COM 类工厂中 CLSID  {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005基本上.net导出excel文件,都需要如此配置一下,不配置有的时候没错,而配置后基本应该不会出错。

具体配置方法如下:  

1:在服务器上安装officeExcel软件.

2:"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"  

3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

4:"DCOM配置"中找到"Microsoft  Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"MicrosoftExcel 应用程序属性"对话框  

5:点击"标识"标签,选择"交互式用户"  

6:点击"安全"标签,"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK  SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动""本地激活"权限.  

7:依然是"安全"标签,"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK  SERVICE"用户,然后赋予"本地访问"权限.  

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:\ProgramFiles\Microsoft Office\OFFICE11\excel.exe" excel2003的安装程序的路径,参数regserver表示注册的意思!

运行后,会启动Office 2003的安装程序,进行修复,重新注册。

excel2007为默认的启动程序的方法类同,可以执行   开始----运行----"D:\ProgramFiles\Microsoft Office\Office12\excel.exe" /regserver

          综上所述,再遇到Excel导出、导入问题时,先考虑权限问题,再考虑office的版本环境!如此基本能够解决这些问题了

6System.ComponentModel.Win32Exception:拒绝访问

【问题描述】

拒绝访问。

说明执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息System.ComponentModel.Win32Exception:拒绝访问。

源错误: 

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。


堆栈跟踪: 

 [Win32Exception (0x80004005): 拒绝访问。]   System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited) +964480   System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited) +396   System.Diagnostics.Process.GetProcessTimes() +67   System.Diagnostics.Process.get_StartTime() +31   Hosentic.CommonHelper.ExcelHelper.KillExcelProcess() in D:\Workspaces\visual studio 2010\hxtr\Soft_Hisense_MobileSales\Hosentic.CommonHelper\ExcelHelper.cs:1852   Hosentic.CommonHelper.ExcelHelper.Dispose() in D:\Workspaces\visual studio 2010\hxtr\Soft_Hisense_MobileSales\Hosentic.CommonHelper\ExcelHelper.cs:1897   Hosentic.CommonHelper.ExcelHelper.SaveFile() in D:\Workspaces\visual studio 2010\hxtr\Soft_Hisense_MobileSales\Hosentic.CommonHelper\ExcelHelper.cs:1651   Soft_Hisense_MobileSales.BLL.Base.DeliveryBatchOutputHandler.ProcessRequest(HttpContext context) in D:\Workspaces\visual studio 2010\hxtr\Soft_Hisense_MobileSales\Soft_Hisense_MobileSales.BLL\Base\DeliveryBatchOutputHandler.cs:123   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

 

【解决方案】

添加一句代码

<identity impersonate="true" userName="accountname"password="password" />

加在System.web

<system.web>

<identity impersonate="true"userName="Administrator" password="1234568@abc.1" />

<customErrorsmode="Off"/>

 

                   <httpRuntimemaxRequestLength="102400" executionTimeout="720"/>

                   <!-- 

            设置 compilation debug="true" 可将调试符号插入到

            已编译的页面。由于这会

            影响性能,因此请仅在开发过程中将此值

            设置为 true

【Internet注解】

前两天在VS2005下做个项目,用里面集成的Web服务调试没问题,但当把该项目在IIS下配置后,用浏览器浏览结果则不正确,这个问题郁闷了一天,后来我想不出招就让我同事调试了一下,他在Web.config中加了一句话:“<identity impersonate="true"  userName="操作系统用户"password="用户密码"/>”,浏览,结果正确,后来我就在网上查了下这句话的作用,MSDN是这样说的:
1、模拟 IIS 验证的帐户或用户

 若要在收到 ASP.NET 应用程序中每个页的每个请求时模拟 Microsoft Internet 信息服务 (IIS) 身份验证用户,必须在此应用程序的Web.config 文件中包含 <identity> 标记,并将 impersonate 属性设置为 true 

2、为 ASP.NET 应用程序的所有请求模拟特定用户

   若要为 ASP.NET 应用程序的所有页面上的所有请求模拟特定用户,可以在该应用程序的 Web.config 文件的 <identity> 标记中指定userName  password 属性。例如:
<identityimpersonate="true" userName="accountname"password="password" />

 

作者官网:https://xyzla.com/

posted @ 2012-07-11 06:54  xyzla  阅读(5898)  评论(7编辑  收藏  举报