C#でExcelに画像データを埋め込む

※追記…ClosedXML v0.88移行は標準で画像の埋め込みに対応しており、ClosedXMLImageSupportを使う必要がなくなりました。

OpenXML SDKで画像を埋め込んだExcelファイルを作成しようとすると、ステップ数が一気に増えてしまって現実的ではありません。ClosedXMLはExcelファイルを作るのにとっても便利なのですが、画像データを扱う機能がありません・・・・と思ったら、ClosedXMLをForkして画像データを扱う機能を追加している方が、ここは感謝して使わせていただきましょう。

ClosedXML.DLLをビルドする

NuGetでダウンロードできるCloseXMLは画像データを扱えませんから、自分でソースコードからビルドします。Fork: ajwhiteway/ClosedXMLImageSupportからソースコードをダウンロードします。
ClosedXML_for_image_download
ダウンロードしたzipファイルを解凍するとソースコードが得られるので、ClosedXML.slnファイルを開いてビルドします。ClosedXML\bin\Releaseに生成されるClosedXML.dllを参照設定します。

これで準備は出来ました。

using BarcodeLib;
using ClosedXML.Excel;
using ClosedXML.Excel.Drawings;
<<中略>>
            var book = new XLWorkbook();
            var sheet = book.AddWorksheet("sheet1");

            // 画像データを指定
            XLPicture pic = new XLPicture
            {
                NoChangeAspect = true,
                NoMove = true,
                NoResize = true,
                ImageStream = File.OpenRead("sample.png")
            };

            // 表示位置を指定
            XLMarker fMark = new XLMarker
            {
                ColumnId = 1,
                RowId = 1
            };
            pic.AddMarker(fMark);

            // 画像データを追加
            sheet.AddPicture(pic);
            book.SaveAs("sample.xlsx");
<<中略>>

と、かなりシンプルに記述できます。
こんなに便利なのだから是非mainに取り込んで欲しいよね。

「C#でExcelに画像データを埋め込む」への3件のフィードバック

  1. 成田様
    はじめまして野村と申します.
    突然のご連絡で申し訳ありません.
    ClosedXMLで画像挿入を行いたく検索していましたところこちらにたどり着きました.
    現在上記で示されているリンク先は無くなってしまっておりまして対象のClosedXML.dllが入手できなく困っております.
    よろしければファイルをいただけないでしょうか?
    お手数ですが,よろしくお願いいたします.

    1. ClosedXML Wikiにある「How can I insert an image」を参照して下さい。
      https://github.com/ClosedXML/ClosedXML/wiki/How-can-I-insert-an-image

      ClosedXMLのversion 0.88から画像を扱う機能が、標準機能として追加されました。
      本家のClosedXMLが画像に対応したことにより、第三者による「ClosedXML for Image Support」は役目を終えて、公開を停止しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です