まずExcelで帳票のレイアウトを作成する。
既存のものを流用してもOK
「参照の追加」で
- VBReport.dll
- VBReport.XlsCrt.dll
- VBReport.XlsPDF.dll
- VBReport.XlsReportCtrl.dll
[出力ディレクトリにコピー]は[常にコピーする]を選択しておくと配布ミスが無くなる。
「追加」-「既存の項目」で
- msvcr71.dll
[出力ディレクトリにコピー]は[常にコピーする]を選択しておくと配布ミスが無くなる。
これを忘れると開発環境では問題ないが、実行環境で例外エラーが出る場合あり
「追加」-「既存の項目」で作成しておいたExcelの帳票レイアウトファイルを追加する。
[ビルドアクション]を[埋め込まれたリソース]にする。
※埋め込むと配布後は帳票の調整ができない。Excelで調整したい場合は[コンテンツ]にする。
帳票印刷のためのコードを書く
'-----ルート名前空間を取得する----- '埋め込まれたリソース(印刷用レイアウトファイル)を利用するために必要 Dim AppNameSpace As String Dim type As System.Type type = Me.GetType() AppNameSpace = type.Namespace Dim EmbedFileName As String = AppNameSpace & "." & "帳票レイアウト.xls" '作成したExcelの帳票レイアウトファイル '---------------------------------- Dim rptCtrl As New VBReport.XlsReportCtrl.XlsReportCtrl Dim srmExcelFile As System.IO.Stream = Nothing Try '印刷用Layout定義 rptCtrl.CtrlMode = VBReport.XlsReportCtrl.xlCtrlMode.cmHide rptCtrl.Option.ExcelMode = True '印刷にExcelオブジェクトを使うかどうか? rptCtrl.Printer.ColorMode = True 'カラー印刷するかどうか? rptCtrl.Option.ProgressDialog = False '印刷の処理経過ダイアログを表示するか? '埋め込まれたリソースの使用 Dim asmExcelFile As System.Reflection.Assembly asmExcelFile = System.Reflection.Assembly.GetExecutingAssembly srmExcelFile = asmExcelFile.GetManifestResourceStream(EmbedFileName) 'プリンタ設定 If rptCtrl.Option.SetPrinter(True, "") = False Then Exit Sub End If 'ページを開始 rptCtrl.Start.Embed(srmExcelFile) rptCtrl.Page.Begin("帳票シート", "1") 'レイアウトのシート名を指定する rptCtrl.Cell("A1").Value = TextBox1.Text '(A1 参照形式) rptCtrl.Pos(1,1).Value = TextBox2.Text '(R1C1 参照形式) "A1"セルは(0,0) '印刷する rptCtrl.Page.End() rptCtrl.Out.DoPrint("帳票シート") 'レイアウトのシート名を指定する Catch ex As Exception MsgBox(ex.Message) Finally rptCtrl.Dispose() ' 読み込んだリソースを閉じる srmExcelFile.Close() End TryrptCtrl.Option.ExcelModeでExcelを使う(True)と帳票の表現力が向上する。
ただし実行環境にExcelが必要になる。
rptCtrl.Printer.ColorModeでカラー印刷(True)とグレースケール印刷(False)を選択する。
プリンタの設定でカラーにしているのに、グレースケールで出力されてすこし嵌った。
まだまだいろいろなことができそうだ。