今回は「DioDocs(ディオドック)」の機能で、Excelのオブジェクト(図形や画像、チャート)を、ワークシートの指定したセル範囲に追加する方法を紹介します。
図形や画像といったExcelオブジェクトを追加する機能は、DioDocs for Excelの従来バージョンでも用意されていましたが、2023年2月8日(水)にリリースされた「DioDocs V6J」でよりシンプルに実装することが可能になっています。
図形をセル範囲に追加する
DioDocs for Excelでワークシートに図形を追加するには、AddShapeInPixel
メソッドを使用する必要がありました。
AddShapeInPixel
メソッドではピクセル単位でチャートの位置やサイズを設定できます。どちらもセル範囲の位置(left
、top
)とサイズ(width
、height
)を以下のようにポイントもしくはピクセル単位で設定する必要がありました。
IShape AddShapeInPixel(
AutoShapeType type,
System.double left,
System.double top,
System.double width,
System.double height
)
例えば、GetAccurateRangeBoundary
メソッドを使用して、範囲の位置とサイズを取得した後、AddPictureInPixel
メソッドの引数にその値を使用して図形を追加していました。
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.Worksheets[0];
// 範囲["C4:G5"]の位置とサイズを取得
RectangleF rect = CellInfo.GetAccurateRangeBoundary(worksheet.Range["C4:G5"]);
// 図形を範囲["C4:G5"]に追加
worksheet.Shapes.AddShapeInPixel(AutoShapeType.Rectangle, rect.X, rect.Y, rect.Width, rect.Height);
V6Jでは、よりシンプルに指定したセル範囲に図形を追加できるようにメソッドが追加されました。メソッドの引数にセル範囲を直接設定することで、事前にセル範囲の位置やサイズの計算を行うことなくセル範囲に図形を追加することができるようになっています。
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.Worksheets[0];
// 画像を範囲["C4:G5"]に追加
worksheet.Shapes.AddShape(AutoShapeType.Rectangle, worksheet.Range["C4:G5"]);
同じように画像やチャートを追加する場合も、セル範囲を引数に直接設定できるメソッドが追加されています。
画像をセル範囲に追加する
// 画像を追加(V5J SP2)
//var rect = CellInfo.GetAccurateRangeBoundary(worksheet2.Range["C4:F6"]);
//IShape picture = worksheet2.Shapes.AddPictureInPixel("DioDocs.png", rect.Left, rect.Top, rect.Width, rect.Height);
// 画像を追加(V6J)
IShape picture = worksheet2.Shapes.AddPicture("DioDocs.png", worksheet2.Range["C4:F6"]);
チャートをセル範囲に追加する
// チャートを追加(V5J SP2)
//var rect = CellInfo.GetAccurateRangeBoundary(worksheet3.Range["B7:L26"]);
//IShape chartCol = worksheet3.Shapes.AddChartInPixel(ChartType.ColumnClustered, rect.Left, rect.Top, rect.Width, rect.Height);
//chartCol.Chart.SeriesCollection.Add(worksheet3.Range["A1:E5"]);
//chartCol.Chart.ChartTitle.Text = "四半期売上";
// チャートを追加(V6J)
IShape chartCol = worksheet3.Shapes.AddChart(ChartType.ColumnClustered, worksheet3.Range["B7:L26"]);
chartCol.Chart.SeriesCollection.Add(worksheet3.Range["A1:E5"]);
chartCol.Chart.ChartTitle.Text = "四半期売上";
数個程度のオブジェクトを追加する場合には特に気にしなくてもいいのかもしれませんが、大量のExcelオブジェクトをワークシートに追加する場合には地味に実装が楽になる機能かと思います。
上記コードを実装しているサンプルは以下です。
また、以下のデモでも動作を確認できます。
さいごに
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。