none
Excelに画像をPasteすると、COMExceptionがthrowされる RRS feed

  • 質問

  • 以下がサンプルコードとExceptionの内容です。
    いろいろと原因を調査してみたのですが、有用な情報にヒットしません。
    情報へのポインタだけでも構いませんので、お力をお借りしたいと思っています。
    よろしくお願いいたします。


    ■■■ コード ■■■

    private void SetImage( Image image, string cellAddress )
    {
      if ( image == null || String.IsNullOrEmpty( cellAddress ) )
        throw new ArgumentNullException();
      // -----
      Worksheet target = this.Excel.ActiveSheet as Worksheet;
      Clipboard.Clear();
      Clipboard.SetImage( image );
      Range range = target.get_Range( cellAddress, cellAddress );
      range.Select();
      try
      {
        // ここでCOMExceptionをthrowされる
        target.Paste( range, false );
      }
      catch ( COMException )
      { }//try
      // -----
      if ( range != null )
        Marshal.ReleaseComObject( range );
      if ( target != null )
        Marshal.ReleaseComObject( target );
    }//SetImage

     

    ■■■ Exceptionの内容 ■■■

    System.Runtime.InteropServices.COMException がキャッチされました
      HelpLink="C:\\Program Files\\Microsoft Office\\OFFICE11\\1041\\xlmain11.chm"
      Message="データを貼り付けできません。"
      Source="Microsoft Office Excel"
      ErrorCode=-2146827284
      StackTrace:
           場所 Office.Interop.Excel._Worksheet.Paste(Object Destination, Object Link)

    2008年1月23日 2:36

回答

  • クリップボード経由とはいえ、貼り付けはできなかったような気がします。(間違えていたらごめんなさい)
    OLE からだったら可能だと思います。

    2008年1月23日 3:06

すべての返信

  • クリップボード経由とはいえ、貼り付けはできなかったような気がします。(間違えていたらごめんなさい)
    OLE からだったら可能だと思います。

    2008年1月23日 3:06
  • PIAでWorkbookを開き、画像をPasteしようとしています。

    PicturesのInsertメソッドなら可能ということでしょうか?

     

    2008年1月23日 4:04
  • ImageをSaveし、Insertメソッドで挿入したところ、正常に動作いたしました。

    ご助言いただきありがとうございました m( __ )m

     

    ■■■ サンプルコード ■■■

    Pictures pictures = target.Pictures( Type.Missing ) as Pictures;
    pictures.Insert( filePath, Type.Missing ).Select( Type.Missing );

     

    2008年1月23日 4:52
  • こんにちは、解決できたようで何よりです。

     GX999 さんからの引用

    Pictures pictures = target.Pictures( Type.Missing ) as Pictures;
    pictures.Insert( filePath, Type.Missing ).Select( Type.Missing );


    Select メソッドは Excel.Picture のインスタンスを取得してから実行してください。
    COM の参照カウントがデクリメントできなくなってしまいます。

    2008年1月23日 5:52