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

摘要:
问题描述1.每个Excel工作簿2.asp Net生成的记录行数。3.下载失败。无法写入临时文件或其所在的磁盘。4.无法加载文件或程序集。“在IIS.6.System.Component下发布Excel程序时,遇到Microsoft.Office.Interop.Excel,版本=14.0.0.0,**5.{00024500-00***,即80070005错误
问题描述

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”无法加载的原因。

【解决方案】

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

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

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

要关闭此功能,请移除注册表值 [HKLMSoftwareMicrosoftFusion!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:WINDOWSassembly目录下面必须要有项目的引用。

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

其中的原理是

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

vstor.exe和O2003PIA.EXE是office可重用开发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:在服务器上安装office的Excel软件.

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

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

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

用程序属性"对话框

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

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

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

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

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

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

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

【解决方案】

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

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

具体配置方法如下:  

1:在服务器上安装office的Excel软件.

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 FilesMicrosoft OfficeOFFICE11excel.exe"/regserver    注意/符号前面有一个空格,其中"C:ProgramFilesMicrosoft OfficeOFFICE11excel.exe" 是excel2003的安装程序的路径,参数regserver表示注册的意思!

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

excel2007为默认的启动程序的方法类同,可以执行   开始----运行----"D:ProgramFilesMicrosoft OfficeOffice12excel.exe" /regserver

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

6、System.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:Workspacesvisual studio 2010hxtrSoft_Hisense_MobileSalesHosentic.CommonHelperExcelHelper.cs:1852   Hosentic.CommonHelper.ExcelHelper.Dispose() in D:Workspacesvisual studio 2010hxtrSoft_Hisense_MobileSalesHosentic.CommonHelperExcelHelper.cs:1897   Hosentic.CommonHelper.ExcelHelper.SaveFile() in D:Workspacesvisual studio 2010hxtrSoft_Hisense_MobileSalesHosentic.CommonHelperExcelHelper.cs:1651   Soft_Hisense_MobileSales.BLL.Base.DeliveryBatchOutputHandler.ProcessRequest(HttpContext context) in D:Workspacesvisual studio 2010hxtrSoft_Hisense_MobileSalesSoft_Hisense_MobileSales.BLLBaseDeliveryBatchOutputHandler.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" />

免责声明:文章转载自《IIS下发布关于Excel导入导出时遇到的问题集锦(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇springboot常见问题REST FRAME WORK--认证 权限 Xadmin下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jsp页面上传excel表格,后台java代码获取并解析

前台body部分: js部分: java代码:action层代码  这个是解决显示的数字带有.0的问题的方案 要有这三个的getting和setting方法  自己上传的excel表格的内容的属性 我的excel表格是这样的:(注意excel表格后缀名是.XLSX) 我这只是获取前台上传的excel表格内容 并没有传入数据库 ,也没有做前台ex...

SQL sever删除全空值的行出现错误提示!

每次导入excel表到数据库到SQL里就会多若干行显示全是'NULL'的行,删除的时候出现如下提示"键列信息不足或不正确。更新影响到多行!" 解决办法:从您的描述中,可以得知您从Excel 中导入数据到SQL Server中。导入后的表不存在主键列,同时出现多行所有列全为Null的情况。在删除这部分行的时候,出现“键列信息不足或不正确。更新影响到多行”。如...

IIS--解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项。试图加载

解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项。试图加载 ASP.NET MVC 项目发布的在本地IIS后,启动网站出现未能加载文件或程序集“…”或它的某一个依赖项。试图加载格式不正确的程序。此问题只发生在64位系统上,而使用Visual Studio2013启动项目则没有此问题。由此可初步判断是网站发布后产生的问题,一种...

Excel计算时间差(精确到分钟、秒)

Excel计算时间差(精确到分钟、秒) 2017年10月19日 17:59:21 selffight 阅读数 9682 设置单元格格式为常规,时间形式为“2017-9-28 18:14:49” 精确到分钟:ABS(J1-K1)*1440 或者INT(K1-J1)*1440 精确到秒:ABS(J1-K1)*1440*60...

Python数据分析:pandas玩转Excel (二)

1 对Excel文件的操作 方法一: 使用xlrd库或者xlwt库进行对excel表格的操作读与写; 方法二: pandas库同样支持excel的读写操作;且更加简便。 2 pd.read_excel( )的参数 读Excel文件 df=pd.read_excel(io, sheet_name=0, # 工作表名称...

什么是父路径及开启的方法

“开启父路径”是在Windows 2003开始有这个概念的,之前的windows xp,windows 2000自带的iis是没有“Windows 2003”这个说法的。Windows 2003自带的IIS6.0安装后默认设置是不开启父路径的。 “开启父路径”主要作用: “启用父路径”,ASP页面中如果使用到了include file=../header....