きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × Angularなどの忘備録

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

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