SpreadBuilderまとめ

Web上にSpreadBuilderに関する情報が少ない気がするので、ちょこっとは資料になればと思い書いてみます。ActiveReports .NET3の知識なのでバージョンによっては微妙に違うかも。

使い方

// ワークブックを作成
DataDynamics.SpreadBuilder.Workbook sb = new DataDynamics.SpreadBuilder.Workbook();
// シートの追加
sb.Sheets.AddNew();
// セルに書き込む
sb.Sheets[0].Cell(0,0).SetValue("セルA1にこれを出力");
// 保存
sb.save("C:\\example.xls");

詳しくはインストールフォルダのチュートリアルを見るといいかも
C:\Program Files\ActiveReportsNET3\Tutorials\VS2005\CS\SpreadBuilderの使用
(普通にインスコしたらこのフォルダだと思う)

Excelと比べてどうか?

単純にデータの出力はSpreadBuilderの方が鬼速いです。
A1-A10000セルへの文字の書き出しの実測が、SpreadBuilderでは10秒程度に対してExcelオブジェクトでは5分ぐらい掛かったような。後でもう一回測定してみる。

指定できる要素

DDSheet ddSheet = sb.Sheets[0];

ddSheet.Name = "シート名"; // シート名
ddSheet.Rows(iRow).Height = (short)sHoge; // 行の高さ
ddSheet.Columns(sCol).Width = (int)iHoge; // セルの幅
ddSheet.AddVerticalPageBreak(sRow, sColBegin, sColEnd); // 印刷時の改ページ
ddSheet.Cell(iRow, iCol).SetValue("セルの値"); // セルの値
ddSheet.Cell(iRow, iCol).FontName = "MS Pゴシック"; // フォント
ddSheet.Cell(iRow, iCol).FontSize = 10; // フォントサイズ
ddSheet.Cell(iRow, iCol).FontBold = true; // フォントをボールドにする
ddSheet.Cell(iRow, iCol).FontItalic = true; // フォントをイタリックにする
ddSheet.Cell(iRow, iCol).FillColor = System.Drawing.Color.FromArgb(255, 255, 255); // セルの背景色
ddSheet.Cell(iRow, iCol).Alignment = DataDynamics.SpreadBuilder.Style.HorzAlignments.Center; // 横配置
ddSheet.Cell(iRow, iCol).VertAlignment = DataDynamics.SpreadBuilder.Style.VertAlignments.Center; // 縦配置
ddSheet.Cell(iRow, iCol).WrapText = true; // 折り返して全体を表示する
ddSheet.Cell(iRow, iCol).Merge(2, 5); // セルの結合。iRowから縦に2行、横に5列をマージ(3x6の結合)
ddSheet.Cell(iRow, iCol).NumberFormat = "#,##0;[Red]-#,##0"; // セルの書式設定(SetValue()で数値を設定した場合のみ有効)

// セルの罫線
ddSheet.Cell(iRow, iCol).BorderTopStyle = BorderLineStyle.Hair; // セルの上部に点線を引く
ddSheet.Cell(iRow, iCol).BorderBottomStyle = BorderLineStyle.Thin; // セルの下部に通常線を引く
ddSheet.Cell(iRow, iCol).BorderLeftStyle = BorderLineStyle.Double; // セルの左側に二重線を引く
ddSheet.Cell(iRow, iCol).BorderRightStyle = BorderLineStyle.Hair; // セルの右側に(ry
ddSheet.Cell(iRow, iCol).BorderDiagonalEnum = BorderDiagonalStyles.Up; // セルの斜めに(ry
// 他の罫線書式
public enum BorderLineStyle { None = 0, Thin = 1, Medium = 2, Dashed = 3, Dotted = 4, Thick = 5, Double = 6, Hair = 7, MediumDashed = 8, DashDot = 9, MediumDashDot = 10, DashDotDot = 11, MediumDashDotDot = 12, SlantedDashDot = 13, }

// 画像の貼り付け
Image image = System.Drawing.Image.FromFile("C:\\example.png");
DataDynamics.SpreadBuilder.Imaging.ImageInfo ii = new DataDynamics.SpreadBuilder.Imaging.ImageInfo();
ddSheet.AddImage(image, ii, Color.Empty, Color.Empty, 1, 0, 0, 256, 5, 0, 4, 0, null);

// 余白
ddSheet.PageSetup.TopMargin = 2.5 * 72 / 2.54;
ddSheet.PageSetup.BottomMargin = 2.5 * 72 / 2.54;
ddSheet.PageSetup.LeftMargin = 2 * 72 / 2.54;
ddSheet.PageSetup.RightMargin = 2 * 72 / 2.54;
ddSheet.PageSetup.HeaderMargin = 1.3 * 72 / 2.54;
ddSheet.PageSetup.FooterMargin = 1.3 * 72 / 2.54;
// ページ設定
ddSheet.PageSetup.Orientation = DataDynamics.SpreadBuilder.Printing.PagePrintOrientation.Landscape; // 用紙向き
ddSheet.PageSetup.PaperSize = System.Drawing.Printing.PaperKind.A3; // 用紙設定
ddSheet.PageSetup.Zoom = 75; // 倍率

多分どうしようもないこと

既存のExcelファイルを読み込んで、そのファイルに追記すること。
http://www.datadynamics.com/forums/117128/ShowPost.aspx

BookのベースフォントがArialになっている。

Excelの行番号や列名を表示している部分が、普通にExcelアプリでファイルを作ったときに比べて小さい。

普通に作成したブックにサイズを合わせるために、行の高さ・セルの幅を数値(ポイント?)を調整すると見た目で合わない。ピクセルで合わせると見た目は合うが印刷プレビューで見ると小さく見える。

ページ設定>シートの「印刷タイトル」にある「行のタイトル」「列のタイトル」の設定ができない

オートシェイプの貼り付けができない。



解決法があったら教えてください

使ってみた感想

やはり速いってのはいいですね。

ダメな点は、ファイルの読み込みができないこと。この為お客さん作成のExcelテンプレートを使うことができず、一からどの座標に何を出力するかを作る必要があります。んでベースフォントが違うせいなのか完璧なレイアウトのコピーを作るのはできなかった。多分Excelファイルっぽいものを作れるけど正式なExcelファイルじゃないのかも。Excelアプリで開いてすぐ保存すると若干ファイルサイズが増えたので。


余談ですけど、SpreadBuilderで出力したファイルもブックを開いたときに選択できる色のパレットが標準と変わってしまうのですが、これはアプリでExcelファイルを出力すると必ず変わってしまうんですかね?以前の案件でMicrosoft.Office.Interop.Excelを使ってExcelファイル出力したときもパレットが変わっていました。