XamQRCodeBarcode で生成した QR コードは、RenderTargetBitmap で画像化し、Infragistics Excel ライブラリの WorksheetImage を使ってワークシートに追加することで、Excel ファイルへ出力できます。
XamQRCodeBarcode の設定
まず Excel の Workbook/Worksheet を作成し、XamQRCodeBarcode に出力したいデータを設定します。コントロールは画面に表示しないため、Measure/Arrange を呼び出してレイアウトを確定させたうえで、RenderTargetBitmap に描画します。
//Excelのワークブックを作成する
var wb = new Workbook(WorkbookFormat.Excel2007);
var ws = wb.Worksheets.Add("sheet1");
//XamQRCodeBarcodeを作成する
var qrCode = new XamQRCodeBarcode
{
Data = "my test " + i,
Width = 100,
Height = 100
};
qrCode.Measure(new System.Windows.Size(qrCode.Width, qrCode.Height));
qrCode.Arrange(new Rect(0, 0, qrCode.Width, qrCode.Height));
//XamQRCodeBarcodeをRenderTargetBitmapに描画する
var renderTargetBitmap = new RenderTargetBitmap((int)qrCode.ActualWidth, (int)qrCode.ActualHeight, 96, 96, PixelFormats.Default);
renderTargetBitmap.Render(qrCode);
WorksheetImage の使用
描画したビットマップを WorksheetImage に変換し、SetBoundsInTwips で配置位置とサイズを指定します。最後に、Worksheet の Shapes コレクションに Add することで、QR コードの画像が Excel ファイル上に配置されます。
//RenderTargetBitmapをMemoryStreamに保存する
var stream = new MemoryStream();
var encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
encoder.Save(stream);
//MemoryStreamからBitmapを作成する
var bitmap = new Bitmap(stream);
//WorksheetImageを作成する
var wsi = new WorksheetImage(bitmap);
wsi.SetBoundsInTwips(
ws,
new Rect(
PixelsToTwips(50 + (i * 200), gfx),
PixelsToTwips(50, gfx),
PixelsToTwips(bitmap.Width, gfx),
PixelsToTwips(bitmap.Height + 30, gfx)));
//QRコードの画像をExcelのワークシートに追加する
ws.Shapes.Add(wsi);
実行結果
アプリケーションを実行して「Create Excel」ボタンをクリックすると、3 つの QR コードが横に並んで配置された Excel ファイル(mySampleQRCode.xlsx)が生成されます。
