none
Windows7 の Excel2013 環境で IE から Excel ファイルを開くと Excel が落ちたりして安定しない RRS feed

  • 質問

  • Microsoft コミュニティより、こちらへの投稿を勧められたので、記載いたします。

    【クライント環境】

    OS:Windows7 SP1  32bit

    製品:Office Professional 2013

    IE:Internet Explorer 9

    【症状(概要)】

    IEからExcelファイルを開く処理が、安定的に起動しない(Excelが落ちる)。

    現在javascriptで、ActiveXObjectを参照し、Excelのオブジェクトを作成して、そのオブジェクトに

    対してopenコマンドでWebサーバで作成したファイルのフルパスを渡しています。(urlのところ

    var objExcel = new ActiveXObject("Excel.Application");
    objExcel.Visible = true;
    objExcel.Workbooks.Open("url");

    開発端末では特に問題はなく稼働しましたが、試験用の端末に持っていくと、Excelファイルが開ける場合と開けない場合があります。 

    成功時は、一旦カラ(新規)のExcelが起動した描写ののち、パスから開かれたExcelファイルが画面表示するといった動きになりますが、

    失敗時は、最初のExcelが起動してまもなくExcelが落ちます。

    なお、以下のエラーメッセージが出力します。

    メッセージ: ファイル'http://XXX.XXX.XXX.XXX/※※※.xls' にアクセスできません。次のいずれかの理由が考えられます。

    ファイル名またはパスが存在しません。

    ファイルが他のプログラムによって使用されています。

    保存しようとしているブックと同じ名前のブックが現在開かれています。

    ライン: 362

    文字: 4

    コード: 0

    URI: ※

    メッセージにあるように、ファイルが存在しない(保存が間に合わない)との仮説で検証を進めましたが、結論から言うとファイルが存在していました。

    となると、メッセージから類推できるものはほぼなく手詰まりでいたのですが、本日までにあれこれと検証して、とても気になる事象を見つけました。

    実際のエラー箇所は、以下のWorkbooks.Openとなります。

    var objExcel = new ActiveXObject("Excel.Application");
    objExcel.Visible = true;
    objExcel.Workbooks.Open("url");

    エラーが発生していない開発端末で実験しまして、MsgboxをOpenの直前で出すようにして、一旦処理を止めています。

    Msgboxのokボタンを押下してopenから処理を再開すると、ファイルが開くまでに10秒近くかかりました。

    一方、Webサーバ上の当該ファイルを直接ダブルクリックしてファイルを開くと、3秒足らずで開きました。

    この結果から、javascriptでExcel操作をしてファイルを開くのと、手作業で単純にファイルを開くのとでは、前者は非常に不可解な動きを

    見せることが分かりました。

    エラーが出る試験端末で、当該処理を流しつつ監視すると、ファイルを開きに行ってだいぶ待たせれて、そのままエラーとなっている

    ように見受けられました。

    もしかしたら、、javascriptでExcel操作をするのと、手作業で単純にファイルを開くのとでは、権限か何かが異なるのではと思っています。

    このような事象に出くわした方がいましたら、共有いただけると幸いです。

    2015年2月10日 15:35

すべての返信

  • JavaScript で Excel をインスタンス化して、その後で Workbooks.Open("url"); でブックを開くのと、Webサーバ上の当該ファイルを直接ダブルクリックしてファイルを開くのとでは動作が違うのが当然ですけど。

    前者はまず Excel を起動して、その Excel がファイルのオープン処理を行っていますが、後者ではエクスプローラーからファイルにアクセスして、それを Excel に渡していますね。

    エラーがでるクライアントとそうでないクライアントがあるのですから、まず環境依存の線を疑って調査すべきでしょう。


    hebikuzure

    2015年2月12日 8:09
    モデレータ
  • var objExcel = new ActiveXObject("Excel.Application");
    objExcel.Visible = true;
    objExcel.Workbooks.Open("url");

    hoge.js

    にして実行すると?

    2015年2月12日 11:38
  • 元スレッドで結構話がすすんでたようですが・・・。

    この処理でなら毎回 Excel プロセス作成する気がするのでタスクマネージャー等で実行ユーザー確認できるのでは?おそらくはブラウザの実行ユーザーと同じと思うけど・・・。

    とりあえず、いまひとつ状況がつかめないのですけど、エラーメッセージ的に http 経由のファイルオープンしてるのですよね?

    おかしな動きをしてるというより、エラー内容どおりの状況なのじゃないかと思います。

    この場合の動作に詳しくないけど、ダウンロード処理とか認証とか ROT 登録とか色々発生しても不思議じゃない・・・。

    とりあえず http 認証処理は Office 2010 以降で変更があったみたいで、

    HTTP を使用して Sharepoint、WebDAV、または Web サイトから Office アプリケーションのファイルを開くと空白で表示される

    上の KB 内容が関係してるなら不安定でなく常にダメだと思いますが、変更があったのは確実でしょう。

    2013 で開ける事もあるのですよね?

    2015年2月12日 13:37
  • JavaScript で Excel をインスタンス化して、その後で Workbooks.Open("url"); でブックを開くのと、Webサーバ上の当該ファイルを直接ダブルクリックしてファイルを開くのとでは動作が違うのが当然ですけど。

    前者はまず Excel を起動して、その Excel がファイルのオープン処理を行っていますが、後者ではエクスプローラーからファイルにアクセスして、それを Excel に渡していますね。

    エラーがでるクライアントとそうでないクライアントがあるのですから、まず環境依存の線を疑って調査すべきでしょう。


    hebikuzure

    hebikuzure様

    ご返信ありがとうございます。

    おっしゃる通りで、ダブルクリックする場合と、インスタンス作成してopenするのとでは動作が違いますね。。。

    不正確な書きざまで申し訳なかったのですが、今回エラー事象が発生する端末で、Excelをスタートアップから

    立ち上げて、そのExcel上でファイル→開くという手順で操作した際にも、ダブルクリックしたときとほぼ同じ

    処理時間で対象ファイルを開けました。(これをマクロの記録をすると、workbooks.openしてますね)

    クライアント端末の設定に差異はなく、あとは実際は開発用のサーバと試験用のサーバで何かしらの環境面での

    差異がないかを並行して超際したいと思います。

    2015年2月12日 15:33
  • こちらもダメですね。

    VBScriptで書き換えてみたところ、結局workbooks.openを使うところで同じ事象がおきました・・・。

    2015年2月12日 15:38
  • kyano30様

    >とりあえず、いまひとつ状況がつかめないのですけど、エラーメッセージ的に http 経由のファイルオープンしてるのですよね?

    御認識通りで、http経由のファイルをフルパスで指定して、Openメソッドに渡しています。

    これは、旧来location.href = "url";のリンク方式でファイルをブラウザ上に開いており、一部流用しているからです。

    >上の KB 内容が関係してるなら不安定でなく常にダメだと思いますが、変更があったのは確実でしょう。

    >2013 で開ける事もあるのですよね?

    有用な記事を展開いただきまして、ありがとうございます。

    だいぶ似通った事象な気がしていますが、御認識の通り、ファイルが開ける場合と開けない場合があります。

    Excel2003ないし2010にダウングレードしても、発生するエラーでした。

    なお、エラーが発生せずファイルが開ける時の傾向としては、以下の2点があります。

    ・端末の負荷が高い状態だと開けることが良くある。

    →最初はこの点ばかり気になって、ハードやクライアント性能があがり、画面表示が早くなったがためにWebサーバの

    ファイル保存が間に合わず、ファイルなしエラーが起きていると勘違いしていました。しかし、ファイルが保存できるよう、

    スリープ(最大10秒)を入れてからファイルを開く等の実験もしてみてもエラーは頻発し、何よりファイルが保存されて

    いたことを確認できたので、勘違いだと思います。

    ・Excelを既に複数起動していると開けることが良くある。

    →こちらは、Excelが全く起動していない状態と、Excelプロセスを複数あげている状態とでは、後者の方がはるかに

    成功確率が高いことからも、なんらかの差はありそうですが・・・。

    あと、一旦開けるようになると立て続けにうまくいったりします。

    このような状態なので、不安定という言い方をしていました。

    2015年2月12日 15:54
  • http によるファイル操作という事は、WebDAV によるアクセスという事になるのでしょうが、問題が発生したりしなかったりですか・・・。

    確率高そうなのは 「WebDAV でロックされ 開かれている or 使用中 と判定されてる?」 という状況と思いますけど、

    「Web サーバー側に WebDAV ログ」

    なんてないですよね・・・確認方法がない・・・。

    それ以外となると確率低そうですが 「新規プロセス作成の初期化動作中に問題でもある?」 といったところから、

    「クライアントの Excel で VBA からスクリプトと同じ url 指定での Web サーバーファイル Open が安定してできるのか?」

    が気になるくらいです。

    しかし、通常 Excel プロセスは複数起動しないよう抑えられてるはず、なのに複数プロセスある場合の方が成功率が高いというのは変な話・・・。

    申し訳ないですが、役立つ返信はできそうもないです・・・。

    2015年2月12日 18:41
  • kyano30様

    色々とアドバイスありがとうございました。

    引き続き技術情報の調査や、NWや基盤といったチームへの連携を行っていましたが、開発期間的にこれ以上引き延ばせず、

    やむなく方式の見直しを行いました。

    これまで実績あるリンク方式(location.href )なので、特に試験環境でも問題は起きていません。

    ただし、本当はリンク方式だとファイルダウンロード時に、ファイルを開く・保存・キャンセルを要求するポップアップが

    どうしても出力されてしまい、お客さんからするとひと手間必要ということで、不評だったりします。

    せめてこのポップアップが出なければよいのですが、Win7だと出力されてしまうようです。

    これさえクリアできれば、ユーザー満足も高い機能となるのですが・・・。

    2015年2月19日 15:58
  • フォーラム オペレーターの星 睦美です。
    カトゥ1225 さん、こんにちは。

    今回は残念ながらフォーラムで問題の解決は難しい事象のようですが、今後もユーザーの満足度を高めるために事象の解決を考えられる場合には、よろしければマイクロソフトのサポート窓口(有償)のご利用も検討いただければと思います。

    問題解決の支援を行うマイクロソフトのアドバイザリー サービスがありますので参考までにご紹介させていただきます。

    ・アドバイザリー サービス:
    http://www.microsoft.com/ja-jp/services/as.aspx

    ではこれからもフォーラムをよろしくお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年2月20日 2:38