none
[PIA] xlBooks.Open(path, ...) 実行時にAccessViolationException RRS feed

  • 質問

  • Office XP Primary Interop Assemblies (PIA)に含まれる Microsoft.Office.Interop.Excel.dll を使用しています。

     

       Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
       Microsoft.Office.Interop.Excel.Workbooks xlBooks = xlApp.Workbooks;
       Microsoft.Office.Interop.Excel.Workbook xlBook = xlBooks.Open(path,
        Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
        Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
    上記強調部分を実行すると、AccessViolationExceptionが発生します。

     

    端末A:XPProSP3、VS2005、AthlonX2 3800+、RAM:1GB、.NET Framework2.0、Excel2000

    端末B:XPProSP3、VS2005、Core2Duo E6850、RAM:1GB、.NET Framework2.0 SP2、Excel2002 SP3

     

    この現象は端末Aのみ発生します。

    Microsoft.Office.Interop.Excel.dllは同一のものを使用しています。

    インストールされているExcelのバージョンは関係ないと認識していますが、それでよろしいのでしょうか?

    Googleで検索しても、情報が少なく、かなり困っています。

     

    よろしくおねがいします。

    2008年10月30日 1:35

回答

すべての返信

  •  花道 さんからの引用

    Microsoft.Office.Interop.Excel.dllは同一のものを使用しています。

    インストールされているExcelのバージョンは関係ないと認識していますが、それでよろしいのでしょうか?

    Googleで検索しても、情報が少なく、かなり困っています。



    Excelのバージョンが関係ないと認識した理由はなんでしょうか?

    「AccessViolationException Excel 2000」をキーワードでgoogle先生にお聞きしたところ、以下の情報に簡単にたどり着きました。

    このスレッドがお役に立つのではないでしょうか?
    http://microsoft-programming-dotnet.hostweb.com/TopicMessages/microsoft.public.dotnet.framework.interop/1901794/1/Default.aspx

    2008年10月30日 2:16
  • ありがとうございます。

     

    >インストールされているExcelのバージョンは関係ないと認識

    Excelがインストールされていない環境でも、Microsoft.Office.Interop.Excel.dllがあれば、ファイルの操作ならできるという記事を

    どこか(憶えてないです)のサイトでみて、納得してしまいました。

     

    >http://microsoft-programming-dotnet.hostweb.com/TopicMessages/microsoft.public.dotnet.framework.interop/1901794/1/Default.aspx
    昨日も見てたのですが、ソースだけを見ていて下のほうの"Replies"に気付きませんでした。

    ありがとうございました。

     

    翻訳結果を読むと、”2000と2003ではOpenメソッドの署名が違う”と書いてありました。

    インストールされたExcelのバージョンが関係している?

    となると、Microsoft.Office.Interop.Excel.dllが2002のものだから、

    開発端末にも2002以降のバージョンをインストールしないといけない、ということでしょうか?

    2008年10月30日 2:45
  • GX999 さん ありがとうございました。

    http://support.microsoft.com/kb/302902/ja

    これを見つけました。

    遅延バインディングで試してみます。

    2008年10月30日 2:48
  •  花道 さんからの引用

    >http://microsoft-programming-dotnet.hostweb.com/TopicMessages/microsoft.public.dotnet.framework.interop/1901794/1/Default.aspx

    遅延バインディングに変更すると、端末AにExcel2002以降をインストールしなくても大丈夫ということでしょうか?



    PIAはCOMのラッパーアセンブリという認識のほうが良いと思います。当然ながら、Excelがインストールされていない環境では実行時にExceptionがthrowされます。

    私もレイトバインドでインスタンスを生成し、Excel 2000 / XP / 2003 / 2007をターゲットにしたExcel帳票を出力するアプリケーションをC#で開発したことがあります。
    2008年10月30日 3:17
  • 小規模なものなので、早速レイトバインドに変更して、今あるExcel2000/XP/2007でテストしてみます。

    本当にありがとうございました!

     

    2008年10月30日 3:32
  • こんにちは。中川俊輔です。

     

    GX999さん、回答ありがとうございます。

     

    花道さん、初めまして。フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、GX999さんの回答へ回答済みチェックをつけさせていただきました。

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

    2008年11月12日 8:12