2017-05-05 48 views
2

我想讀一個.xls文件是從第三方網站下載。我不會每天處理文件,所以在上傳文件之前我無法將格式更改爲.xlsxRetrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).與CLSID {00024500-0000-0000-C000-000000000046}檢索COM類工廠組件失敗

我使用的是vb.net本站IIS7

我不斷收到以下錯誤。 應用程序池用我的用戶登錄,我的用戶是服務器上的管理員,可以訪問所有內容。

我也做了以下內容:

  • 辦公室安裝在主機
  • 我已經進入DCOMCNFG並提出確保Launch and Activation PermissionsAccess PermissionsConfiguration Permissions擁有完全控制我的登錄帳戶上。
  • 服務器具有x64體系結構,而且我也有Office 64安裝
  • 我已確認該文件夾C:\Windows\SysWOW64\config\systemprofile\Desktop以及C:\Windows\SysWOW64\config\systemprofile\Desktop確實存在。
  • 我知道C:\Windows\SysWOW64\config\systemprofile\Desktop適用於x86架構,但我確定它是在那裏以防萬一系統想要使用它。

這是我的代碼如下所示:

Imports genlib 

Imports Excel = Microsoft.Office.Interop.Excel 

Partial Class HeadOffice_OpperationalParameters_FailedBranches 
    Inherits System.Web.UI.Page 

    Private Sub releaseObject(ByVal obj As Object) 
     Try 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
      obj = Nothing 
     Catch ex As Exception 
      obj = Nothing 
     Finally 
      GC.Collect() 
     End Try 
    End Sub 

    Protected Sub btnRunReport_Click(sender As Object, e As EventArgs) Handles btnRunReport.Click 
     If fuReport.HasFile = False Then 
      ClientScript.RegisterClientScriptBlock(Me.GetType, "", "alert('Upload a file to process.');", True) 
      Exit Sub 
     End If 

     Dim ReportFileName As String = Server.MapPath("~") & "FilesUploaded\" & fuReport.FileName.Replace(".XLS", "_" & Today.ToString("yyyy.MM.dd") & "_" & TimeOfDay.ToString("HH.mm.ss") & ".xls") 
     fuReport.SaveAs(ReportFileName) 

     Dim xlApp As Excel.Application 'Here 
     Dim xlWorkbook As Excel.Workbook 
     Dim xlWorksheet As Excel.Worksheet 

     Try 
     '================================================= 
     ' ERROR OCCURS ON NEXT LINE 
     '================================================= 
      xlApp = New Excel.ApplicationClass 
      xlWorkbook = xlApp.Workbooks.Open(ReportFileName) 
      xlWorksheet = xlWorkbook.Worksheets("RptTransactionDetail") 

      BrowserWrite(xlWorksheet.Cells(2, 2).value, True) 
      xlWorkbook.Close() 
      xlApp.Quit() 
     Catch ex As Exception 
      ClientScript.RegisterClientScriptBlock(Me.GetType, "", "alert('" & ex.Message.Replace("'", "\'").Replace(vbCr, "\r").Replace(vbLf, "\n") & "');", True) 
      Exit Sub 
     End Try 

     releaseObject(xlApp) 
     releaseObject(xlWorkbook) 
     releaseObject(xlWorksheet) 

    End Sub 
End Class 

誰能告訴我如何解決這個錯誤,或採取什麼步驟,以確定問題?

我已經閱讀了堆棧溢出的大部分帖子,但是有太多無法添加我已經看過的每個答案。

+0

錯誤發生在哪條線上? – dbasnett

+0

@dbasnett第33行:xlApp =新Excel.ApplicationClass –

+0

你試過xlApp =新的Excel。應用程序 – dbasnett

回答

1

I am using a vb.net site with IIS7

微軟目前並不提倡,不支持,Microsoft Office應用程序自動化從任何無人蔘與的非交互式客戶端應用程序或組件(包括ASP,ASP.NET,DCOM和NT Service),因爲Office在此環境中運行時可能會出現不穩定的行爲和/或死鎖。

如果您要構建在服務器端上下文中運行的解決方案,你應該嘗試使用已取得安全的無人蔘與的執行部件。或者,您應該嘗試找到允許至少部分代碼運行客戶端的替代方案。如果您從服務器端解決方案使用Office應用程序,則該應用程序將缺少成功運行所需的許多必要功能。此外,您將面臨整體解決方案穩定性的風險。請閱讀​​文章中的更多內容。

作爲一種可能的解決方法,如果僅處理開放式XML文檔,可以考慮使用Open XML SDK,請參閱Welcome to the Open XML SDK 2.5 for Office。或者只是任何第三方組件需要在服務器端執行(例如,閱讀Aspose)。

相關問題