.NET で使用できる帳票ツールについて(15)
私はフリーITエンジニアとして、業務分析、業務改善提案を含む設計、製造、受入検査を含む検査、システム運用開始後の運用改善提案など、様々な分野を担当しています。
「.NET で使用できる帳票ツールについて」の続編です。
今回は VB-Report の続きです。
「セクションレポート」を利用して、改ページのコードから開放されるかを試して見ました。
作りたいレポートは次のようなものです。
これは、ExcelファイルをPDF化したもので、Excelファイルは次のようなものです。
このようにExcelファイルが存在する場合、VB-Report のデザインファイルは容易に作成可能です。
デザインファイルは次のようになります。
データ行の1行目を ** + フィールド名 に置き換えるだけです。
この時、セルの書式設定を変更しないように注意します。
例えば、「**issuedate」の書式は次のようになっています。
帳票作成のコードは次のようになります。
// 執筆書籍一覧
CellReport cellReport1 = new CellReport();
cellReport1.FileName = Path.Combine(Program.GetTemplateDirectoryPath(), "BookListTemplate.xlsx");
cellReport1.Report.Start();
cellReport1.Report.File();
// 2. 連続帳票処理を開始します。
cellReport1.Section.Start("Sheet1", false);
// 3. 帳票のヘッダ、フッタの位置を指定します。
cellReport1.Section.Header("1:3");
// フッター定義なくても指定が必要
// フッター不要の時は、テンプレートのフッター部分を非表示にするとよい
cellReport1.Section.Footer("5");
// 4. 各オプションを設定します。
// MaxDetailCount は、大きく指定してもあふれた分は次ページに送られる
//cellReport1.Section.MaxDetailCount = 17;
// MaxDetailCount = 0 は自動(嬉しい機能)
cellReport1.Section.MaxDetailCount = 0;
// 空行でページを埋めたいときは ReportToFill = true
//cellReport1.Section.ReportToFill = true;
// 5. 帳票の明細行の位置を指定します。
SectionDetail sectionDetail = cellReport1.Section.Detail("A4:I4");
//データベース接続
conn.ConnectionString = connectionString;
// 接続します。
conn.Open();
// Q_EntryCount を読む
OleDbCommand command = new OleDbCommand();
command.CommandText = SqlClass.Sql執筆書籍一覧;
command.Connection = conn;
OleDbDataReader reader = command.ExecuteReader();
int fieldCount = reader.FieldCount;
// 結果を表示します。
while (reader.Read())
{
// 6. 帳票の明細処理を開始します。
sectionDetail.Start();
// 7. 帳票の明細部にデータを設定します。
for (int i = 0; i < fieldCount; i++)
{
sectionDetail.Cell("**" + (string)reader.GetName(i)).Value = reader.GetValue(i);
}
// 8. 帳票の明細処理を終了します。
sectionDetail.Next();
}
// 9. 連続帳票処理を終了します。
cellReport1.Section.End();
cellReport1.Report.End();
// 接続を解除します。
conn.Close();
ViewerControl viewerControl1 = new ViewerControl();
viewerControl1.Clear();
viewerControl1.Document = cellReport1.Document;
// PrintOut メソッドで印刷します。
viewerControl1.PrintOut();
作成したレポートは次のようになります。
DataReader 作成のコードと
Section.Header
Section.Footer
Section.Detail
の部分を変更するだけで、共通コードになります。
ただし、このセクションレポート機能は、若干不安定な印象を受けます。
例えば、このレポートの場合、フッターは不要ですが、Section.Footer の設定を省いてしまうとエラーもなく、正しくないレポートを作成してしまいます。
いずれ修正されるとは思いますが。
今回を持って、「.NET で使用できる帳票ツールについて」のシリーズを一旦終了にしたいと思います。
[2015/12/22 追記]-------------------------------------------------------------------------------------------
フッターを指定しなかった場合に、正しくないレポートを出力する件についてサポートに問い合わせたところ、
「Section.Start メソッドを呼び出したタイミングで ErrorNo.Paramが発生しています」
とのことでした。
cellReport1.ErrorNo
で確認できます。
sectionDetail.Start();
if (cellReport1.ErrorNo != ErrorNo.NoError)
{
MessageBox.Show("エラー発生:"
+ cellReport1.ErrorNo.ToString());
return;
}
のようなコードで確認できます。
その他、Errorイベントを捕捉することも可能です。
ErrorイベントについてはHelpの
[目次]
- [基本操作]
- [イベントを実装する]
- [クライアントコンポーネント]
- Error イベントを実装する(C#)
を参照してください。
サポートが親切で好感が持てます。