QA@IT

Windows server2012でのレガシASPからExcelファイルの操作

3977 PV

いつも質問ばかりで申し訳ありません。itaと申します。

レガシーASPで、規定のExcelファイルにある値を書き込み、保存するページを作成しており、既存環境では問題なく実行できています。(test.xlsファイルのA1セルに現在の日時が入り作成されます)

それをWindows server 2012R2の移植環境で実行した処、下記のエラーで困っています。
サーバー側でのセキュリティ関連だと睨んでいますが、解決には至っておりません。
必要な設定等の対応策を教えていただけないでしょうか?
よろしくお願いいたします。

下記のソースで12行目のSaveAsで待機状態(?)か、制御が返ってない状態になってしまいます。

 1:Dim oExcel, oWorkBook, FileName, oFso, F_Exists
 2:FileName = "test.xls"
 3:Set oFso = Server.CreateObject("Scripting.FileSystemObject")
 4:F_Exists = oFso.FileExists(Server.MapPath(FileName))
 5:If F_Exists Then
 6:    oFso.DeleteFile(Server.MapPath(FileName))
 7:End If
 8:Set oFso = Nothing
 9:Set oExcel = Server.CreateObject("Excel.Application")
10:Set oWorkBook = oExcel.Workbooks.Add
11:oWorkBook.ActiveSheet.Range("A1").Value = now()
12:oWorkBook.SaveAs (Server.MapPath(FileName))
13:oWorkBook.Close
14:Set oWorkBook = Nothing
15:oExcel.Quit
16:Set oExcel = Nothing

既存環境:
・OS:Windows server 2003
・IIS:IIS6
・Excel:Excel 2003

移植環境:
・OS:Windows server 2012 R2
・IIS:IIS8.5
・Excel:Excel 2003

回答

boros様

回答ありがとうございます。
又、返信遅くなり申し訳ありません。

ご指摘通り、ダミーファイルを置いてみて実行し、正常に削除されたことを確認しました。

又、ソースコードの「Server.MapPath(FileName)」を変数化して行いましたが、結果は変わりませんでした。
いろいろな場所でサーバー上でのExcelファイルの操作はMSも認めていないようなことが書かれており、イレギュラーなことをしているようですので、とりあえず本機能を搭載するのはやめる方向です。
ありがとうございました。

編集 履歴 (0)
  • itaさんの質問について、スレッドがいくつか放置状態になってます。この質問も含め、解決したのでしたらクローズしてください。 -

5:If F_Exists Then
6: oFso.DeleteFile(Server.MapPath(FileName))
7:End If

12行目の前に、ここのIfを通るかどうか検証してください。
当該のファイルを一度、ダミーとして置いてみて、それが意図したとおり消えるかどうかです。
消えないならファイルパスの指定方法が間違っています。

編集 履歴 (0)
  • 回答では言及しませんでしたが、ソースコードの構成にもちょっと問題ありです。
    Server.MapPath(FileName)を処理の最中に何度もする必要はないはずなので、FileNameと同じく、最初に変数化しておくべきです。
    その上で、当該のファイルの有無をチェックするミニマムコードを作って問題を切り分けてください。
    -
ウォッチ

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