IIS経由で、ActiveXのDLLからEXCELを編集

解決


GHT  2009-01-24 21:28:19  No: 101493

お世話になっております。

ActiveXからEXCELを出力する件で、
ご質問がございます。

現在ASP(.Netではない)+ActiveX Dll(VB6.0)で
Webシステムを構築しております。
サーバーは、Windows 2000 server、IIS5.0を使用しております。

システムは、ASPで入力した内容をDBに登録し、
ASPからActiveXで生成したCOMコンポーネントを起動させます。

ActiveXの仕様の概略ですが、SQLServerから取得したデータを
EXCEL2000のファイル(以下雛形ファイルと呼称)の所定のセルに埋め込み、
EXCELファイルを生成すると仕様になっております。

開発環境で動かした際は、無事EXCELを生成できたのですが、
Windows2000Serverに、ActiveXを「regsvr32」でレジストリ登録し、
ASPを動かしてみると
「Set xlsApp = New Excel.Application」を指定した箇所で、
エラーNo「6」エラー内容「Overflow」というエラーが発生してしまい、
それ以上の動作ができません。
※デバッグログを出力する方式で処理を追ってみました。

ちなみに開発環境は「WindowsXP」「VB6.0 SP6」「Microsoft Office 2000 SP3」、
参照設定は「Microsoft Excel 9.0 Object Library」です。

サーバ側では、コンポーネントサービスで、
上記のActiveXDLLをCOM+アプリケーションの「コンポーネント」に登録し、
「ロール」に「IUSER_xxx」を加えました。

また「dcomcnfg」の「Microsoft Excel アプリケーション」でも
下記のように設定しました。
1)「セキュリティ」タグ
    「独自のアクセス許可を使う」「独自の起動アクセス許可を使う」で、
    「IUSR_xxxx」を追加
2)「識別」タグ
    「次のユーザー」で「ユーザー名」を「(マシン名)\IUSR_xxxx」

またOfficeがインストールされているフォルダ、ActiveXのDllが存在するフォルダ、
雛形ファイルが存在するフォルダ、いずれも「IUSR_xxxx」の権限を与え、
フルコントロールにしています。

これ以上、設定する箇所があるのでしょうか。
またはやり過ぎて、逆に動かなくなっているのでしょうか。

何方かお分かりになる方がいらっしゃいましたら教えて下さい。

長文失礼いたしました。


GHT  2009-01-24 21:30:59  No: 101494

追記です。
ソースを記載いたします。
=====================================================================
Public Sub CreateExcel(ByRef rErrNum As Integer, ByRef rErrDes As String)

    Dim xlsApp As Excel.Application            'EXCELアプリケーション
    Dim xlsBoks As Excel.Workbooks             'EXCELワークブックス
    Dim xlsBok As Excel.Workbook               'EXCELワークブック
    Dim fs As New Scripting.FileSystemObject   'ファイル操作

    On Error GoTo ErrorTrap

    '雛形ファイルをコピー
    fs.CopyFile "C:\temp\basefileExcel.xls", "C:\temp\newfileExcel.xls", True

    'デバッグログ出力(サブルーチン化)
    Call subErrlog(sPrjID, "01", "STEP01 OK", "CreateEXCEL")

    'EXCELオブジェクトを生成      ←←!!ここでエラーが発生したと思われる!!
    Set xlsApp = New Excel.Application

    'デバッグログ出力(サブルーチン化)
    Call subErrlog(sPrjID, "02", "STEP02 OK", "CreateEXCEL")

    'EXCEL非表示
    xlsApp.Visible = False

    'デバッグログ出力(サブルーチン化)
    Call subErrlog(sPrjID, "03", "STEP03 OK", "CreateEXCEL")

    'xlApplication から WorkBooks を取得する
    Set xlsBoks = xlsApp.Workbooks
    Set xlsBok = xlsBoks.Open("C:\temp\newfileExcel.xls")

    'ブック保存し、EXLCEブックを閉じる
    xlsBok.Close saveChanges:=True
    Set xlsBok = Nothing
    xlsBoks.Close
    Set xlsBoks = Nothing

    'Excel を終了する
    xlsApp.Quit
    Set xlsApp = Nothing

    'オブジェクト開放
    Set fs = Nothing

    Exit Sub

ErrorTrap:

    If (rErrNum = 0) Then
        rErrNum = Err.Number
        rErrDes = Err.Description
    End If

End Sub
=====================================================================


オショウ  2009-01-24 23:04:39  No: 101495

問題の切り分け・・・

まず、そのActiveX DLL を、VB6のプログラム中で
CreateObject して正常に動作しますか?

動作しない場合は、IIS側ASPの問題ではないです。

もし正常に動作するならば、やはり権限の問題でしょう。

で、ASPで行う場合は・・・偽装設定しないと、EXCELは
正常に動作しなかったように思います。

※  私は、ExcelCreator や、SpreadSheetGear 使って、
    サーバーサイドでエクセルファイルの作成させました。

参考までに・・・

以上。


GHT  2009-01-25 00:36:18  No: 101496

オショウ様、御回答ありがとうございます。

>まず、そのActiveX DLL を、VB6のプログラム中で
>CreateObject して正常に動作しますか?
>動作しない場合は、IIS側ASPの問題ではないです。

  VB6のプログラム(EXE)でないと駄目でしょうか。
  VBScriptで簡単に作ってみましたが、
  同じ箇所で「6.Overflow」というエラーが出ました。

  また「dcomcnfg」の「Microsoft Excel アプリケーション」の「識別」を
  「対話型ユーザー」にしてみたところ、
  「Set xlsApp = New Excel.Application」では
  エラーにならなくなり、EXCELのブックも開けているようですが、
  別の箇所で同じ「6.Overflow」というエラーになりました。
  ※ASPで動かしても、VBSで動かしても同じです。

  まだ詳細は調べていませんのでこれから調べます。

  ただ上記を踏まえると
  「dcomcnfg」の「識別」は「対話側ユーザー」にすべきなのでしょうか。

御返答頂いてまたご質問させて頂き、
大変恐縮ですが、よろしくお願いします。


オショウ  2009-01-25 03:56:37  No: 101497

その手のプログラムは・・・
かれこれ12年?も前(VB5のころ)にやったもので、設定が
どうだったかすっかり忘れてます。

対話型設定は必要だったと思います。

ただ、IIS下でエクセル使った場合、どういうタイミングか
エクセルがメモリ上に残ってしまい次の処理が行えなかったり
IISが異常終了したりしましたので、エクセルを使うのは、
お勧めしません。

ASPもデバッグできたはずなので、ASP側のどの箇所で、
エラーしているのか調べてみて下さい。

以上。


GHT  2009-01-25 04:52:22  No: 101498

オショウ様、御回答ありがとうございます。

>ただ、IIS下でエクセル使った場合、どういうタイミングか
>エクセルがメモリ上に残ってしまい次の処理が行えなかったり
>IISが異常終了したりしましたので、エクセルを使うのは、
>お勧めしません。

  個人的な意見で述べさせていただければ、
  私も正直好ましい方法とは思えませんでしたが、
  版権の問題と御客様の御都合により、使わざる得ない状況で御座います。
  幸いな事に、1日にそう何度もアクセスがあるわけではなく、
  1日1度はサーバーの再起動もあるようなので、
  御客様にはその点を御理解いただいております。

上記のエラーはEXCELとは全く関係ない部分で発生しておりまして、
その部分の修正を行い、無事EXCELが作成されました。

本当に助かりました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加