まず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 Try
rptCtrl.Option.ExcelModeでExcelを使う(True)と帳票の表現力が向上する。ただし実行環境にExcelが必要になる。
rptCtrl.Printer.ColorModeでカラー印刷(True)とグレースケール印刷(False)を選択する。
プリンタの設定でカラーにしているのに、グレースケールで出力されてすこし嵌った。
まだまだいろいろなことができそうだ。