none
Excel 2007のオートメーション起動 RRS feed

  • 質問

  • 弊社では、Visual Studio 2005で開発したプログラムを販売しています。
    そのプログラムがWindows Vistaで動作するかを検証していたところ、プログラムがOffice professional 2007 に含まれるExcelを起動する処理が動作しないことがわかりました。

    Excelを起動する箇所は、以下のようなコードになっています。

    01    try
    02    {
    03        Microsoft.Office.Interop.Excel.Application oXL;
    04        Microsoft.Office.Interop.Excel.Workbook oWB;
    05        Microsoft.Office.Interop.Excel.Worksheet oSheet;
    06        oXL = new Microsoft.Office.Interop.Excel.Application();
    07        oXL.Visible = true;
    08        oWB = oXL.Workbooks.Add(Missing.Value);
    09        oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oWB.ActiveSheet;
    10    }
    11    catch (Exception ex)
    12    {
    13        MessageBox.Show(ex.GetType().ToString() + "\r\n" + ex.Message);
    14    }

    この8行目のWorkbookを追加しようとする箇所で、「System.Runtime.InteropServices.COMException」が発生します。
    メッセージは、「ライブラリの形式が古いか、または種類が無効です。 (HRESULT からの例外: 0x80028018 (TYPE_E_INVDATAREAD))」
    となっています。

    ところが、別のテストプログラムを作って試すとExcelが起動できます。
    なぜこの違いが出るのか調べてみたところ、元のプログラムで次のコードがあります。
       Application.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
    これを行わないようにすれば、元のプログラムでもExcelが起動できることがわかりました。
    しかし、これを行わないようにすると、コントロールパネルの「地域と言語のオプション」で日付を和暦と設定したときに動作が異常になるので、外すことはできません。
    これを行うとExcelが起動できないというのは、Excel 2007のバグではないでしょうか?
    何か回避策はないでしょうか?

    2006年12月15日 20:14

すべての返信

  • まさぽん さん、こんにちは。

     まさぽん さんからの引用
    これを行うとExcelが起動できないというのは、Excel 2007のバグではないでしょうか?

    その認識は誤りです。

    そもそも、Office PIA は、2007 を正式にサポートしているわけではありません。
    つまり、Excel 2007 が悪いなんてことにはなり得ないです。

    2006年12月16日 8:16
  • じゃんぬねっとさん、私が参照したPIA(Primary Interop Assemblies) は、Office 2007 に含まれる次のものです。

    コンポーネント:Microsoft Office 12.0 Object Library
    TypeLibバージョン:2.4.0.0
    ファイル:Office.dll

    コンポーネント:Microsoft Excel 12.0 Object Library
    TypeLibバージョン:1.6.0.0
    ファイル:Microsoft.Office.Interop.Excel.dll

    Excel 2007 のものを使用しているのに、「Office PIA は、2007 を正式にサポートしているわけではありません。」ということはあるのですか?
    サポートしないのなら、Excel 2007からPIAを外すべきではないでしょうか?

    2006年12月16日 10:00
  • この問題は、次のように、Excel出力処理の間だけCurrentCultureの設定を変更することによって回避することにしました。

        try
        {
            // 一時的にCurrentCulture設定を変更
            Application.CurrentCulture =
                new System.Globalization.CultureInfo("ja-JP", false);

            Microsoft.Office.Interop.Excel.Application oXL;
            Microsoft.Office.Interop.Excel.Workbook oWB;
            Microsoft.Office.Interop.Excel.Worksheet oSheet;
            oXL = new Microsoft.Office.Interop.Excel.Application();
            oXL.Visible = true;
            oWB = oXL.Workbooks.Add(Missing.Value);
            oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oWB.ActiveSheet;
            // シートにデータを出力
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.GetType().ToString() + "\r\n" + ex.Message);
        }
        finally
        {
            // CurrentCulture設定をInvariantCultureに戻す
            Application.CurrentCulture =
                System.Globalization.CultureInfo.InvariantCulture;
        }


    CurrentCultureがInvariantCultureだとExcel2007が起動できないのは、Office2000 PIAでも同じなので、Excel2007本体の問題だと思います。


    ところで、この問題をマイクロソフトに修正してもらうには、どうすればよいのでしょうか?
    サポートオンラインで問い合わせようとしましたが、「有償サポート契約が必要」とのことです。私はMSDNの会員で、サポートライセンスがあるはずなのですが、「サポートオプション」に何を入れればよいのかわかりませんでした。
    https://support.microsoft.com/oas/default.aspx?gprid=11346

     

    2006年12月22日 18:10
  • イチローさん、情報提供ありがとうございます。
    「地域の設定が Excel にインストールされた言語と異なる場合、Excel プロジェクト内でマネージ コードが実行されません。」
    は、Excel2003について書かれたもののようです。(日本語版最終更新日 2003年11月14日)
    私が指摘した問題はExcel2007で発生し、Excel2003では発生しないので、異なる問題だと思います。
    ただ、CurrentCulture を InvariantCulture に変えることが、地域の設定を「Excel にインストールされた言語と異なる」設定にするということなのであれば、同類の問題かもしれません。
    2003年時点で「既知の問題として、現在調査中です。」ということですが、まだ解決していないのでしょうか?
    2006年12月27日 0:31