2017-05-05 108 views
2

第三者サイトからダウンロードした.xlsファイルを読み込もうとしています。毎日ファイルを処理しないので、ファイルをアップロードする前にフォーマットを.xlsxに変更することはできません。私はIIS7vb.netサイトを使用しています Retrieving 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クラスファクトリを取得できませんでした

私は、次のエラーを得続けます。 アプリケーションプールはユーザーと一緒にログインし、ユーザーはサーバー上の管理者で、すべてにアクセスできます。

私は次のことを行っている:

  • 事務所は、私がDCOMCNFGに入ったとLaunch and Activation PermissionsAccess PermissionsConfiguration Permissionsは私のログインアカウントとの完全な制御を持っていることを確認してきたホストマシン
  • にインストールされています。
  • サーバーにはx64アーキテクチャがあり、Office x64もインストールされています
  • C:\Windows\SysWOW64\config\systemprofile\DesktopC:\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 on line 33:xlApp =新しいExcel.ApplicationClass –

+0

xlApp = New Excelを試しましたか?アプリケーション – dbasnett

答えて

1

I am using a vb.net site with IIS7

Microsoftがあるため、(ASP、ASP.NET、DCOM、およびNTサービスを含む)任意の無人、非対話型クライアントアプリケーションまたはコンポーネントから、Microsoft Officeアプリケーションのオートメーションを現在推奨していませんし、サポートしていません。 Officeがこの環境で実行されると、Officeが不安定な動作やデッドロックを起こすことがあります。

サーバー側のコンテキストで実行されるソリューションを構築する場合は、無人で実行するために安全にされたコンポーネントを使用するようにしてください。または、コードの少なくとも一部がクライアント側で実行できるようにする代替手段を見つけようとする必要があります。サーバー側のソリューションからOfficeアプリケーションを使用する場合、アプリケーションには正常に実行するために必要な機能が不足しています。さらに、全体的なソリューションの安定性でリスクを冒すことになります。詳細については、​​の記事をご覧ください。

公開XMLドキュメントのみを処理する場合は、Open XML SDKを使用することをお勧めします(Welcome to the Open XML SDK 2.5 for Officeを参照)。または、サーバー側の実行用に設計されたサードパーティコンポーネント(Asposeなど)のみ。

関連する問題