きな粉もち.net

.NET関連仕事に携わっています。OSSのソースを読んで気がついたことを中心に呟いたりブログに投稿したりしています。最近はUiPathを使ったRPAも研究中。気軽にフォローやツッコミよろしくおねがいします! Gitはここを使っています https://github.com/kinakomotitti

ClosedXML × Excel × 画像ファイルの貼り付け

この記事の目的

この記事では、
ClosedXMLでExcelに画像を貼り付けること
を目的としています。

本題

★サンプルコード

以下のFAQにもあるようにClosedXMLで画像の添付がサポートされていました!
github.com

ちょうどExcelに画像を貼り付けていくプログラムを作っていたので、
画像を貼り付けるサンプルコードを作ってみました。

static void Main(string[] args)
        {
            var cellHeight = 18; //試行錯誤の結果の数字
            var row = 1;
            using (var wb = new XLWorkbook())
            {
                //ワークシートの設定
                var ws = wb.AddWorksheet("Sheet1");

                //貼り付ける画像を指定
                var imagePath = @"./Resource/image.jpg";

                //タイトルとしてA1セルに文字を出力
                ws.Cell($"A{row}").Value = "これ食べたい";
                row++;

                //ワークシートの変数のAddPictureメソッドを呼び出す
                //左端がB2のセルになるように画像を移動する
                var image = ws.AddPicture(imagePath).MoveTo(ws.Cell($"B{row}").Address);

                //画像の左端のセル番号を計算してみる・・・
                row += (int)(image.Height / cellHeight);

                //画像にかぶらないように値を出力する
                ws.Cell($"A{row}").Value = "以上です。";

                wb.SaveAs("file.xlsx");
            }
        }

※出力結果の例は以下の通りです
f:id:kinakomotitti:20180515000913p:plain

★課題!

画像の左端のセルの番号の計算をするとき、
dpiとか全く考慮せずに良い感じになる値を使って計算しています。
自分の環境では、うまいこと計算できていますが、
ほかの環境下では動きそうもありませんw

計算方法を考え直さないと・・・