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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM