IIS7.0でのExcel WorkBooks.Openが失敗する問題

このQ&Aのポイント
  • Win2008SVでのExcel操作で困っています。Excel WorkBooks.Openが失敗する問題が発生しています。
  • CreateObjectがエラーとなる問題はDCOM構成で解決しましたが、WorkBooks.Openメソッドの実行エラーの原因や対処方法がわかりません。
  • VBプログラムでは同じコーディングで正常に動作していますが、ASPでの実行時にエラーが発生しています。原因や代替案についてご教示いただけると助かります。
回答を見る
  • ベストアンサー

IIS7.0での、Excel WorkBooks.Openが失敗します

IIS7.0での、Excel WorkBooks.Openが失敗します。 IIS7.0でのExcel操作で困っております。 環境  Windows2008Server IIS7.0  ASP(.Netでは無い)  Excel Win2000SVで動作しているWebシステムのリプレースのため、Win2008SVで動作検証中です。 このプログラムは、サーバー上のExcelファイルを開き、このExcelをHTML形式で出力(保存)します。そして出力されたHTMLを画面に表示させます。 Set dObjExcelApp = CreateObject("Excel.Application") dObjExcelApp.WorkBooks.Open Excelファイル名 dObjExcelBook = dObjExcelAppActiveWorkbook   中略 dObjExcelBook.SaveAs HTMLファイル名 これを実行すると WorkBooks.Openがコード:1004、"WorkBooksクラスのOpenメソッドが失敗しました。" で、エラーとなります。 当初CreateObjectが"70"でエラーとなっていたのですが、DCOM構成でアクセス許可を付与することによりエラーを回避しました。 しかし、WorkBooks.Openメソッド実行エラーの原因、対策が分かりません。 (パス不正とかではありません。) 同じコーディングをしたVBプログラムは正常に動作します。 原因、対処方法、または代替案などご存知の方がいらっしゃいましたら、ご教示ください。 宜しくお願いいたします。

  • mktkf
  • お礼率100% (3/3)

質問者が選んだベストアンサー

  • ベストアンサー
  • svalterf
  • ベストアンサー率100% (1/1)
回答No.3

windows 2008 server standard R2 + iis7.0 + php5.3 + excel2010 の環境で私も同様な現象に悩まされました。 phpからcomとしてexcelは起動しますが、workbooksのopenメソッドでファイルが見つからない、と失敗します。(2003server+iis6+php4+excel2000で問題なし) 私は下記の対応で動きましたので、まだお試しでなければご確認下さい。 1.dcomでexcel.applicationを開きます。 2.IDタブで「起動したユーザー」から「このユーザー」に変え、admin権限を持つユーザーを指定します。(ユーザーはadmin権限を持つユーザーを新規に作成した方が良いと思います)

mktkf
質問者

お礼

svalterfさん。こんばんわ。 ご回答ありがとうございます。 実は今日、ファイルアクセス権限では無くて、実行権限(ユーザ)か?と思い DCOM構成を再度見直していて、この方法を試してみたところです。 一応動いたけれど、合ってるのかなぁ????? と思って帰宅したところなので、ご回答を見て安心しました。 先週末から悩んでいましたが、やっと解決しました。 社内でも経験者がおらず、ネットでの調べ方も悪かったのか、中々情報が無くて苦労しました。 ありがとうございました。

その他の回答 (2)

noname#259269
noname#259269
回答No.2

3rd パーティ製品はこんなのがあります。私は .NET 版しか使った事ないですが。。。 http://www.adv.co.jp/products/product_ExcelCreator3.htm 上記ページを見ると .NET 版に同梱されているそうなのでそちらを買った方がよいかもしれません。ただその部分のプログラムは大きく組直す事になると思います。

mktkf
質問者

お礼

edp3142さん、早速のご紹介ありがとうございます。 ExcelCreator・・・VB5の時代、使ってました! .NET版もあるんですね。 今回は改修範囲を見積もるのが目的なので、この部分を改修するならするで 工数とソフトの費用を見積もらなければいけないので、目的の動きが可能か調べます。 今回の問題は権限が原因っぽいので、もうすこし調べてみます。

noname#259269
noname#259269
回答No.1

ここが参考になるでしょうか。 http://support.microsoft.com/kb/257757/ja とりあえず、Open するファイルのアクセス権が ASP の実行アカウントに割り当てられていますか。 蛇足ながら、上記 URL に記載があるとおり、Office がインストールされていないクライアント PC からこの ASP 機能を利用すると、ライセンス違反になります。 ベストな代替案は 3rd パーティのツールを使う事でしょう。

mktkf
質問者

お礼

edp3142さん。こんばんわ。 返事が遅くなり、申し訳ありません。 会社では、掲示板への書き込みが禁止されているので。 ファイルのアクセス権を確認しましたが、フルアクセスに設定しています。 (Windows2008を触るのが初めてなので、他に設定する箇所が無ければ) ライセンスの問題は把握しています。 Officeがインストールされているクライアントが前提としているようです。 といってもプログラムでチェックしていませんが。 ただ、監査がうるさいので顧客側もそれは遵守しているかと思います。 他にもお気づきの点がございましたら、ご指南ください。 3rd パーティのツールも何か良いのがあれば、ご教示ください。

関連するQ&A

  • workbooks.openでフリーズ

    excel2007で作成されたVBAが記述されているファイルですが、 excel2010で実行するとフリーズします。 内容的には、ある2つのファイル内容を参照し、比較するというコードなのですが、 F8で一行ずつ実行していくと、workbooks.openメソッドでフリーズしていることがわかりました。 参照ファイルをローカルに置いて実行するとフリーズせずに処理できますが、 参照ファイルがサーバーにある状態では無理です。 これは、サーバーへのアクセス権限の問題なのでしょうか? でも、excel2007で成功した同じユーザーで実行しても、フリーズとなります。 ネットでいろいろと検索し、openメソッドの前にDoEventsメソッドを記述してみましたがフリーズしました。 どなたか回避策がわかる方、教えてください。お願いします。

  • Workbooks.Open

    Set xlApp = CreateObject("Excel.Application") Set xlWbk = xlApp.Workbooks.Open("C:\Users\test".xlsx", , , Password:="0000") の部分でエラーが発生する時があります。 しかし毎回同じコードなのに エラーが発生する時としない時があります。 その違いが判りません。 エラーの内容は、 実行時エラー1004 workbooksクラスのOpenプロパティを取得できません。 です。 win8、オフィス2010です。 どういう意味のエラーなのでしょうか? 回避する方法を教えてください。

  • IIS7.5 Excel ファイルオープンエラー

    ■現状 現在、WindowsServer2003、IIS6.0、Excel2003でaspのプログラムを、WindowsServer2008 R2、IIS7.5に移行しているのですが、 登録等の動作は問題なく稼動しているのですが、Excelファイルの出力で 『Workbooks クラスの Open プロパティを取得できません。』 とエラーが出力され、Exelファイルへの出力ができません。Excel2003/2010ともに同じです。 insXlsApp = Server.CreateObject("Excel.Application") insXlsBooks = insXlsApp.Workbooks insXlsBook = insXlsBooks.Open(strPAth & "blank.xls") Openのところでエラーになります。 ■環境 WindowsServer2008 R2 IIS7.5 ASP.NET2.0 Excel2003/2010 ■設定 web.config ・<identity impersonate="true"/> IISのアプリケーションループの設定では、 ・32bit → 有効 ・マネージパイプラインモード →クラシック ・プロセスID → ApplicationPoolIdentity DCOM設定 ・Microsoft Excel Applicationのプロパティで「セキュリティ」→「起動とアクティブ化のアクセス許可」→「カスタマイズ」で  IUSERに権限を付与。  ※「ID」タブを選択し、ユーザーから「このユーザー」を選択、実行したときに与える権限を持つユーザーとパスワードを入力してもダメでした。 フォルダ ・エクセルが保存されているフォルダに、IUSER,administrator,EvereOneにフル権限を与えてみてもダメでした。 このやり方は非推奨なのは知っていますが、サーバー、クライアント全てにエクセルは入っています。 サードパーティ等他のやり方が良いのは重々承知の上で質問しています。 色々調べ試してみましたが上手くいきません。 どなたかお知恵を貸してください。よろしくお願いいたします。

  • ASPでExcelファイルを開く場合

    ASPでExcelファイルを開く場合WEBでいろいろ検索すると Set ObjExcel = Server.CreateObject("Excel.Application") ObjExcel.Workbooks.Open"****.xls" で開く方法が記載されていたので ためしているのいですが Set ObjExcel = Server.CreateObject("Excel.Application") でエラーが出てしまいます。 解決する方法はありますでしょうか。 環境:Windows XP,IIS,Office 2003 **************************************************** エラー タイプ Server オブジェクト, ASP 0178 (0x80070005) 許可を確認中に Server.CreateObject の呼び出しに失敗しました。このオブジェクトへのアクセスは拒否されます。 *****************************************************

  • VistaのIISで動作するASPのExcel処理

    お世話になります。 Windows Vista Business 上のIISで、Excelファイルを読み込む処理を書いたのですが、Excelファイルを読み込む処理でエラーになってしまいます。 下記がソースです。 <% On Error Resume Next fileName = "C:\test.xls" Set objExcel = CreateObject("Excel.Application") objExcel.Visible = False 'ここでエラーが発生する Set objWorkbook = objExcel.Workbooks.Open (fileName) 'この処理で発生したエラーの内容を出力する Response.Write Err.Description & "<br />" Err.Clear objExcel.Quit %> これをWebサーバに保存し、実行すると、ブラウザ上で下記が出力されます(「Response.Write Err.Description & "<br />"」で出力される内容です)。 ------------------------------------------------------------ ファイル 'C:\test.xls' にアクセスできません。次のいずれかの理由が考えられます。 ? ファイル名またはパスが存在しません。 ? ファイルが他のプログラムによって使用されています。 ? 保存しようとしているブックと同じ名前のブックが現在開かれています。 ------------------------------------------------------------ もちろん、ファイルは存在しますし、Excelが起動していない状態でもエラーとなってしまいます。 Windows XPのIISでは、Excelの読み込みができていました。 ここで質問する前にいろいろ調べたのですが、Webサーバ上でExcelを起動すること(WordやExcelをcomオートメーションで起動すること)が、非推奨だったようですね。 そこで、知りたいことは下記の通りです。 1.VistaのIIS上でExcelを起動する術は、もはやないのか(ExcelをWebサーバ上で動作させる非推奨なプログラムを動かせなくした、など)。 2.読み込ませるExcelのファイルに適切な権限を与えればよいのか。 3.IIS7で作成したWebサイトの設定(アプリケーションプールや物理パス資格情報など)を適切な値にすればよいのか。 以上、よろしくお願い致します。

  • Webサバーに有るExcelのマクロが動かない

    Webサーバに有るExcelファイルを、htmlのリンクから開いて、マクロを実行すると、csvファイルの読込で下記のエラーに成ります 「実行時エラー'1004' 'open'メゾットは失敗しました'Workbooks'オブジェクト'」です。 リンクで開かないで、直接開いて実行すると問題なく動きます。 どうしたら良いのか力を貸してください。

  • IUSR でCreateObject("Excel.Application")ができない。

    こんにちは。 ASPでCreateObject("Excel.Applilcation") を行いたいのですが、 認証ユーザがIUSRのときに ------------------------------------------------ Microsoft VBScript 実行時エラー エラー '800a0046' 書き込みできません。: 'CreateObject' ------------------------------------------------ と、失敗してしまいます。 認証ユーザをAdministratorにすると正常動作しました。 どこかのフォルダにIUSRの権限設定を行えばよいのかなと思うのですが、 ご存知の方教えてください。 ------------------------ 環境 ------------------------ Windows Server 2003 IIS 6.0 Excel 2000

  • サーバー上のブックを開けない時(エクセルVBA)

    ネットワーク障害などでサーバー上のエクセルブックが開けない時、かなり待たされてから次のメッセージが出ます。 実行時エラー'1004' 'Open'メソッドは失敗しました。'Workbooks'オブジェクト しかもその間、Ctrl-Breakも受け付けてくれません。 正確に待ち時間は計ったわけではありませんが、10分くらいでしょうか。 なんとかこれを回避して、早い時間にエラーメッセージを出してコントロールを戻すことはできないでしょうか? 以下のVBAでオープンしています。 Workbooks.Open Filename:=myFileName, Readonly:=True よろしくお願い申し上げます。

  • VBScript Excel Workbooks

    全く下らない質問で申し訳ございません。 あくまでも、興味があったので質問しているだけで、 以下のやり方でなくても、やりたいことが実現できることは 分かっているのですが、教えて頂ければ幸いです。 VBScriptで Option Explicit Dim x, y Set x = CreateObject("Excel.Application") Set y = x.Workbooks.Open("D:\Sample.xlsx").Worksheets(1) | x.Workbooks(1).Close x.Quit Set y = Nothing Set x = Nothing 普通は、 Set y = x.Workbooks.Open("D:\Sample.xlsx") Set z = y.Worksheets(1) として、 y.Close とする方が分かりやすいのは分かっているのですが、 あえて、勉強を兼ねて、上記のように記述しました。 私が知りたい疑問は、Excelのファイルを2つ開いた場合です。 Option Explicit Dim x, y, z Set x = CreateObject("Excel.Application") x.Application.DisplayAlerts = False x.Visible = False Set y = x.Workbooks.Open("F:\Sample.xlsx").Worksheets(1) Set z = x.Workbooks.Add().Worksheets(1) z.Range("A1").Value = y.Range("A1").Value x.Workbooks(1).Close x.Workbooks(2).SaveAs("F:\Test_02.xlsx") x.Workbooks(2).Close x.Quit Set z = Nothing Set y = Nothing Set x = Nothing このプログラムで、 Set y = x.Workbooks.Open("F:\Sample.xlsx").Worksheets(1) の行が無ければ、「x.Workbooks(1).Close」もなく、 その下の行は、 x.Workbooks(1).SaveAs("F:\Test_02.xlsx") x.Workbooks(1).Close となり、問題なく「Test_02.xlsx」ファイルが出来ていました。 ファイルを2つ開いたので、「Workbooks(2)」となる、 と思ったのですが、どうやら違うようです。 (「インデックスが有効範囲にありません」というエラーになります) 何度も言いますが、こんなことで悩む必要がないのは 分かっているのですが、何か気になります。 上記のやり方で、Excelのファイルを2つ開いている場合の 2つ目のファイルを閉じる方法を教えてください。 ホント、下らない質問で申し訳ございませんが よろしくお願い致します。 以上

  • エクセルファイルが開けない

    こんにちわ。 今回、困難にぶち当たったのでご質問させて頂きます。 VB(正確にはACCESSのVBAですが)から、複数のエクセルファイルを順番に開き、中のセルをクリアする処理をしています。 ソースを下記に記載させて頂きます。 Private Sub Excel_Delete(sXlsFile As String) Dim sXls As Workbook Set sXls = excel.Workbooks.Open(sXlsFile, 0) sXls.Sheets(1).Range("I7:AM3005").ClearContents sXls.Saved = True sXls.Save sXls.Close Set sxlx = Nothing End Sub 今まで問題なく動作していたのですが、ある日、 Set sXls = excel.Workbooks.Open(sXlsFile, 0) の部分でエラーが出ました。 ↓エラー内容は下記の通りです。 実行時エラー-2147417851(80010105) openメソッドは失敗しました ’Workbooks’オブジェクト 開くエクセルファイルは、フォルダから列挙して取得していますので、 ちゃんと存在しています。 しかも、エラーが起きるファイルは同じファイルではなく、エラーが起きない時もあります。 列挙するエクセルファイルは、日に日に増えていっていて、現在では500個 近くになっています。 数が増えてきたのが原因でしょうか? それとも、何か根本的な間違いがあるのでしょうか。 何かわかる方がいらっしゃいましたら、よろしくお願いします。