QA@IT

ASP.NETからEXCEL操作時にActiveX コンポーネントを作成できません。とエラー発生

14293 PV

ASP.NET(VS2012)にて、エクセルを作成するプロセスを起動させ、エクセル作成完了後、
ダウンロードするシステムを構築しました。

クライアントから行った場合、下記のところで、エラーが発生してしまいます。
一番下にうまくいくパターンも記載しておりますが、果たしてこの設定でいいのかご意見を頂ければと思います。

【aspx側からエクセル出力~ダウンロード】
oProcess = New Process
oProcess.StartInfo.FileName = ”エクセル作成プロセス名”
oProcess.StartInfo.Arguments = "日付等の引数"
oProcess.Start() '' 開始
oProcess.WaitForExit(20000) '' 処理の終了を待つ(タイムアウト時間あり)
oProcess = Nothing

If File.Exists("エクセルファイルフルパス") = True Then
'' ファイルが存在していればダウンロードを開始する
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(ファイル名).Replace("+", "%20"))
Response.Flush()
Response.TransmitFile("エクセルファイルフルパス")
Response.End()
End If

【エクセル作成プロセス_エラー発生個所】
objExcel = CreateObject("Excel.Application.15") 'New Excel.Application

《エラー内容》
System.Exception: ActiveX コンポーネントを作成できません。
場所 Microsoft.VisualBasic.Interaction.CreateObject(String ProgId, String ServerName)

【環境/構成】
〇ネット接続されていないローカルネットワーク
〇サーバ:Windows7 Professional(32bit)、IIS7.5、EXCEL2013
     ・アプリケーションプール→ASP.NET v4.0(統合)と、DefaultAppPool(Framework2.0/統合)
     ・エクセル起動するASPは複数あります。
     ・DCOMからMicrosoft Excel.Applicationの設定
      ⇒データが置かれているコンピューター上で。。。。チェック済み
      ⇒このコンピュータでアプリケーションを実行する。。。。チェック済み
      ⇒セキュリティタブは最終的にeveryoneのフルコントロールでもダメでした。
      ⇒対話ユーザー
     ・C:\Windows\System32\config\systemprofile\Desktop\フォルダ作成+admin権限付与
・Administratorsグループに、IIS AppPool\DefaultAppPoolとIIS AppPool\ASP.NET v4.0
      ユーザーを追加
     ・ASPアプリの設定として、認証は、匿名認証と基本認証のみ

・クライアント:Windows7 Ultimate(64bit)

【結果】
リモートデスクトップでログインしている状態だと、CreateObjectできました。
又、リモートデスクトップを閉じた状態で、対話ユーザーを起動起動ユーザーにすると、Createできました。
権限が怪しいので、リモートデスクトップを閉じた状態+対話ユーザーで、アプリケーションプールの
プロセスモデルのIDをApplicationPoolIdentityから、アドミン権限ユーザーに変更しましたがダメでした。
他の投稿でもある通り、ログオフだと対話ユーザーはダメみたいなので、これでいいのでしょうか。。。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34020&forum=7

回答

サーバーで Excel を含む Office を操作するのはサポートされてません。詳しくは以下のページを見てください。

Office のサーバーサイド オートメーションについて
http://support2.microsoft.com/default.aspx?scid=kb;JA;257757

Office のサーバーサイド オートメーションの再考
https://crieilluminate.wordpress.com/2009/09/15/office-%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89-%E3%82%AA%E3%83%BC%E3%83%88%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%86%8D%E8%80%83/

なので、今回の問題に対しての直接の解決策は得られないのではないかと思います。

代案としては、サーバーで使えるように開発されたサードパーティ製品や Open XML を利用するのがよさそうです。

Open XML SDK 2.0 を使用して Excel 2010 ブックを生成する
http://msdn.microsoft.com/ja-jp/library/office/hh180830(v=office.14).aspx

Excel 2007 以降なら ClosedXML というのもあります。

ClosedXML - The easy way to OpenXML
http://closedxml.codeplex.com/

書式の設定などは必要なく、単純にプレーンな Excel ファイルを作るだけで良ければ、JET または ACE プロバイダと ADO.NET を利用しても可能です。

ACE OleDb で Excel のブック作成
http://surferonwww.info/BlogEngine/post/2012/01/26/Creating-Excel-workbook-by-using-ACE-OleDb-provider.aspx

上記の記事では ACE を使っていますが、Excel 2003 以前なら ACE に代えて JET が使えます。

ただ、ACE は先に紹介した記事によると、Office のサーバーサイドオートメーションの範疇に入るそうですので、十分に検証するなどの注意が必要かもしれません。

編集 履歴 (0)
  • サードパーティの使用を検討致します。
    回答ありがとうございまた。

    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。