C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.72855 の関連記事表示

<< 0 >>
■72855  C# Excelファイルへの画像挿入。
□投稿者/ amagi -(2014/07/27(Sun) 14:43:13)

    分類:[C#] 

    C# shapes.AddPictureによるExcelファイルへの画像挿入。

    現在、C#でExcelファイル(xls)にPNG画像を貼り付けるツールを作成しています。
    以下のプログラムを実行したのですが、
    shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100);
    の部分で以下の様なエラーが表示されました。

    ----------------
    エラー文
    ----------------
    型 'System.Runtime.InteropServices.COMException' のハンドルされていない例外が mscorlib.dll で発生しました

    追加情報: 指定された値は境界を超えています。
    ----------------

    つきましては解決方法を教えてください。



    -----------------------
    プログラム
    -----------------------
    Excel.Application exApp = new Excel.Application();

    Excel.Workbook wkbook;

    Excel.Workbooks wkbooks = exApp.Workbooks;

    exApp.Visible = true;

    exApp.DisplayAlerts = false;

    wkbook = (Excel.Workbook)wkbooks.Open(@"C:\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    Excel.Sheets sheets = wkbook.Worksheets;

    Excel.Worksheet wksheet = (Excel.Worksheet)sheets["test"];

    Excel.Range cells = wksheet.Cells;

    Excel.Range range = (Excel.Range)cells[1, 21];

    range.Select();

    Excel.Shapes shapes = wksheet.Shapes;
    float fx = float.Parse(range.Left.ToString());

    float fy = float.Parse(range.Top.ToString());

    shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100);
親記事 /過去ログ122より / 関連記事表示
削除チェック/

■72856  Re[1]: C# Excelファイルへの画像挿入。
□投稿者/ 魔界の仮面弁士 -(2014/07/28(Mon) 10:42:18)
    No72855 (amagi さん) に返信
    > wkbook = (Excel.Workbook)wkbooks.Open(@"C:\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    この構文を使っているということは、VS2008(C# 3.0)以降ではなく、
    VS2005(C# 2.0)以下のバージョンをお使いのようですね。


    > shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100);
    > 追加情報: 指定された値は境界を超えています。

    第二引数 LinkToFile、第三引数 SaveWithDocument の組み合わせが不正だからです。

    LinkToFile に msoFalse (図を、独立したファイルのコピーとして貼り付け)を指定した場合は、
    SaveWithDocument は msoTrue (文書内に画像ファイルも保存)を指定せねばなりません。今回は、
    両方とも msoFalse にしたため、エラーが表示されることになります。

    LinkToFile が msoTrue (図を、作成元画像ファイルへのリンクとする)にした場合は、
    SaveWithDocument は、msoFalse (文書内のリンク情報だけを保存する)であっても、
    msoTrue (文書内に画像ファイルも保存) であっても構いません。


    なお画像を挿入した後、そのExcel文書を、元の画像ファイルを参照できない環境下で
    開きなおした場合、SaveWithDocument = msoFalse だと、画像は表示されず、かわりに
    赤×アイコンで表示されることになります。
    一方、SaveWithDocument = msoTrue にした場合は、元画像が削除されていても表示されますが、
    その分、Excel 文書ファイルのサイズは肥大化しますのでご注意下さい。



    > つきましては解決方法を教えてください。

    回答ついでに、2点ほど指摘を。


    まず、AddPicture メソッドは Shape オブジェクトを返却しますので、
     Excel.Shape shape = shapes.AddPicture(……);
    のように記述するようにしましょう。後々、Shepe オブジェクトを解放するためにも。


    それから、以下の座標取得処理。
    > float fx = float.Parse(range.Left.ToString());
    > float fy = float.Parse(range.Top.ToString());
    double → string → float という多段階変換にされていますが、これは
    意図的なものでしょうか。 double → float でも十分かと思いますが…。

    float fx = (float)range.Left;
    float fy = (float)range.Top;
記事No.72855 のレス /過去ログ122より / 関連記事表示
削除チェック/

■72859  Re[2]: C# Excelファイルへの画像挿入。
□投稿者/ amagi -(2014/07/28(Mon) 21:31:31)
    質問の回答、さらに2点の指摘を頂き、有難うございました。

    参考にさせて頂きます。
記事No.72855 のレス / END /過去ログ122より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -