プロが教える店舗&オフィスのセキュリティ対策術

いつも参考にさせていただいております。

現在、aspで作成したweb環境を運用しております。

その中で抽出したデータをExcelに出力する処理がありますが、これを以下の方法で行っております。
====================================
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
 ~
response.flush
response.end
====================================

ただ、「Excel2013」であることから、出力されたExcelを開くたびにバージョン不一致の警告(ファイル形式と拡張子が一致しません)が表示されて不便です。

よって、Excel出力をExcelオブジェクトを用いた方法に変更しようと考えております。
====================================
'ファイルシステムオブジェクト生成
Set oFs = Server.CreateObject("Scripting.FileSystemObject")

'テンポラリファイル名取得
sFileName = Split(oFs.GetTempName, ".")

'エクセルファイル名にする
sXlsName = sFileName(0) & ".xls"

'テンプレートが保存されているフォルダの物理パスを取得
sPath = oFs.GetFolder(Server.MapPath("/hogehoge/")).ParentFolder

'エクセルのオブジェクトを生成
Set oXls = Server.CreateObject("Excel.Application")

'エクセルのテンプレートファイルを開く
Set oTmp = oXls.Workbooks.Open(sPath & "\temlate\template.xls")
 ~
====================================



ここからが質問です。

Excelオブジェクト作成時、エラーになってオブジェクトの作成が失敗します。
====================================
【オブジェクト作成を「Server.CreateObject」で行った場合】
Set oXls = Server.CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Server オブジェクト エラー 'ASP 0177 : 80080005'
  Server.CreateObject に失敗しました

【オブジェクト作成を「CreateObject」で行った場合】
Set oXls = CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Microsoft VBScript 実行時エラー エラー '800a01ad'
  ActiveX コンポーネントはオブジェクトを作成できません。: 'Excel.Application'
====================================

いろいろなサイトを情報をもとに対応しましたが、解決の糸口が見えない状況です。
====================================
【今まで試みた対応】
(1)コンポーネントサービスの「DCOMの構成」にて、「Microsoft Excel Application」の「起動とアクティブ化のアクセス許可」に「EveryOne」を追加。
(2)以下のフォルダを用意してフォルダのアクセス許可に「EveryOne」を追加。
 C:\Windows\System32\config\systemprofile\Desktop
 C:\Windows\SysWOW64\config\systemprofile\Desktop
(3)オブジェクト作成時、「Excel.Application」を「Excel.Application.15」に変更。
====================================

なお、開発環境は以下となります。
====================================
【開発環境】
OS:windows 8.1 64bit
IIS:8.5
Excel:2013
その他:(1)aspを使用(.netではありません)
    (2)「windows 8.1」はあくまでテスト環境です。
     正常に動作することを確認後、本番環境「Win2008Server R2」に組み込む予定です。
====================================

私事ではありますが、スケジュール的に押し迫っております。

お忙しいところ申し訳ありませんが、解決方法のご教授をお願いいたします。

以上です。

A 回答 (1件)

残念ながら、何重もの理由で、そのソリューションは成立しません。



・Excelのようなマルチスレッド未対応のオブジェクトをWebサーバで走らせると、確実に暴走するか、エラーで停止します。ExcelやAcrobatなど、何でも同じです。
・エラーが起きた後、メモリからオブジェクトが抹消されないため、あっという間にメモリリークを起こし、サーバがハングします。
・そもそも、ソフトウェアベンダは、Excelなどのアプリケーションをサーバ上で稼働させるライセンシーを認めていません。
・64biot OSのうえでレガシーASPが正常に動作する保証はありません。そもそも、32bitの2003サーバでさえ、ASPを動作させるためには多数の依存ライブラリをインストールする必要がありました。
FileSystemObjectやDictionaruObjectは間違いなく落ちます。
・Windows8.1/64bitと、Windows 2008R2サーバでは、IISのバージョンや動作スキームが完全に異なっており、32ビット依存コンポーネントのインストール状況が違います。
また、上記のセキュリティ設定も、サーバOSは根本的に異なります。

自分ならさっさと諦めて、その部分だけASPX仕様に変更し、Excel生成用のWebライセンスつき市販ライブラリを購入してカタをつけます。

Excel Creator
http://www.adv.co.jp/product/product_excelcreato …

Webサーバ上で正しいExcelデータを生成するということは、非常にコストのかかるタスクなのですよ。

それが予算の関係で不可能なら、CSVで我慢してもらうか、Office XLSXを解読して生成するか、HTMLかWell FormedなXMLを生成し、レスポンスヘッダを詐称して強引にエクセルに認識させる(要するに現在ご提示のNGな方法)かすることです。

回答になってなくて申し訳ありませんが、「やっても無駄」というお答えしかできません。
あしからず。
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。

そうですか、私がやろうとしていたことは、ある意味、非現実的なことなのですね。

別方法を含めて再検討します。

お礼日時:2014/05/07 23:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています