XamQRCodeBarcode で生成した QR コードは、RenderTargetBitmap で画像化し、Infragistics Excel ライブラリの WorksheetImage を使ってワークシートに追加することで、Excel ファイルへ出力できます。

XamQRCodeBarcode の設定

まず Excel の WorkbookWorksheet を作成し、XamQRCodeBarcode に出力したいデータを設定します。コントロールは画面に表示しないため、MeasureArrange を呼び出してレイアウトを確定させたうえで、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)が生成されます。

製品について

Ultimate UI for WPF