SPREADには、シートのそのままをPDFに出力する機能が備わっています。 「SheetView」クラスの「PrintInfo」のPDF出力の指示を行えば、「SheetView」の印刷メソッドでPDF出力ができます。
以下のソースですが、「Button1_Click」の前までは以前のソースを踏襲していまして、 単に単一行選択表示で1000行3カラムのテストデータを表示しています。
「Button1_Click」の中で、PDFファイルへの出力処理を行っています。 「ActiveSheet.PrintInfo」の「PrintToPdf」をTrueに設定し、「PdfFileName」にPDF出力ファイル名を設定しています。 その後、SPREADコントロールの「PrintSheet」メソッドで「ActiveSheet」の印刷処理を行います。
ここで注意点があります。「PrintSheet」メソッドの直後でのPDFファイルの表示処理がコメントになっていますが、 コメント部分を実行に戻して処理すると、「AcrobatReader」は起動するのですがPDFファイルが見つからないとエラーになります。 「PrintSheet」メソッドの直後ではタイミング的に、まだPDFファイルの出力が終了していないので、エラーになる様です。
そこで解決方法として、「PrintSheet」メソッドの終了時点で「AcrobatReader」を起動することになります。 ちょうど「PrintMessageBox」イベントがそれに当たります。引数の「e」の「BeginPrinting」が「False」になった時が 「PrintSheet」が終わったことを通知してくれますので、そのタイミングで「AcrobatReader」起動の関数をコールします。
下図は、プログラムが起動しした時の表示です。
下図は、「Button1」をクリックした時の表示です。
=====
2016/03/07:の時の情報
以下のソースですが、「Button1_Click」の前までは以前のソースを踏襲していまして、 単に単一行選択表示で1000行3カラムのテストデータを表示しています。
「Button1_Click」の中で、PDFファイルへの出力処理を行っています。 「ActiveSheet.PrintInfo」の「PrintToPdf」をTrueに設定し、「PdfFileName」にPDF出力ファイル名を設定しています。 その後、SPREADコントロールの「PrintSheet」メソッドで「ActiveSheet」の印刷処理を行います。
ここで注意点があります。「PrintSheet」メソッドの直後でのPDFファイルの表示処理がコメントになっていますが、 コメント部分を実行に戻して処理すると、「AcrobatReader」は起動するのですがPDFファイルが見つからないとエラーになります。 「PrintSheet」メソッドの直後ではタイミング的に、まだPDFファイルの出力が終了していないので、エラーになる様です。
そこで解決方法として、「PrintSheet」メソッドの終了時点で「AcrobatReader」を起動することになります。 ちょうど「PrintMessageBox」イベントがそれに当たります。引数の「e」の「BeginPrinting」が「False」になった時が 「PrintSheet」が終わったことを通知してくれますので、そのタイミングで「AcrobatReader」起動の関数をコールします。
Imports FarPoint.Win.Spread
Public Class Form1
'フォームロード時にSPREADの初期化
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'SPREADの初期化
Call InitilayzeSpread(Me.FpSpread1)
'一覧データ表示
Call Me.DisplayData()
End Sub
'SPREADの初期化
Private Sub InitilayzeSpread(ByVal spd As FpSpread)
'SPREADの設定
With spd
'スクロールバーの設定
.HorizontalScrollBarPolicy = ScrollBarPolicy.AsNeeded
.VerticalScrollBarPolicy = ScrollBarPolicy.AsNeeded
'分割ボックスの設定
.ColumnSplitBoxPolicy = SplitBoxPolicy.Never
.RowSplitBoxPolicy = SplitBoxPolicy.Never
'カーソル設定
.SetCursor(CursorType.Normal, Windows.Forms.Cursors.Arrow)
.SetCursor(CursorType.LockedCell, Windows.Forms.Cursors.Arrow)
'セルがアクティブ時に編集モードにしない
.EditModePermanent = False
'セルがアクティブ時に既存の内容を選択しない
.EditModeReplace = False
End With
'アクティブシートの設定
With spd.ActiveSheet
'選択状態
.SelectionStyle = SelectionStyles.SelectionRenderer
'編集モードの設定
.OperationMode = OperationMode.SingleSelect
'列のサイズ変更可、行のサイズ変更不可に設定する。
.Columns.Default.Resizable = True
.Rows.Default.Resizable = False
'SPREADのアクティブシートのカラム数を3に設定
.ColumnCount = 3
'SPREADの行クリア
.RowCount = 0
End With
End Sub
'一覧データ表示
Private Sub DisplayData()
'ソースが長くなるのでWith宣言
With Me.FpSpread1.ActiveSheet
'描画を停止させる
Me.FpSpread1.SuspendLayout()
'データの行数分の処理
For i As Integer = 0 To 999
'行数を増やす
.RowCount += 1
'各セルへのデータ設定
.SetText(i, 0, "A" & i.ToString("000"))
.SetText(i, 1, "B" & (i Mod 100).ToString("000")) '100で割った余り
.SetText(i, 2, "C" & (i Mod 10).ToString("000")) '10で割った余り
Next
End With
'描画を再開させる
Me.FpSpread1.ResumeLayout(True)
'先頭行を選択設定(1行目が選択色になる)
Me.FpSpread1.ActiveSheet.AddSelection(0, 0, 1, 1)
End Sub
'PDF出力ボタン
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
'アクティブシートをPDFとして出力
Me.FpSpread1.ActiveSheet.PrintInfo.PrintToPdf = True
'PDFファイル名
Me.FpSpread1.ActiveSheet.PrintInfo.PdfFileName = "test.pdf"
'アクティブシートをPDFとして印刷
Me.FpSpread1.PrintSheet(Me.FpSpread1.ActiveSheet)
''PDF表示
'Call DispPdf("test.pdf")
End Sub
Private Sub FpSpread1_PrintMessageBox(ByVal sender As Object,
ByVal e As FarPoint.Win.Spread.PrintMessageBoxEventArgs)
Handles FpSpread1.PrintMessageBox
'印刷終了タイミングか??
If e.BeginPrinting = False Then
'PDF表示
Call DispPdf("test.pdf")
End If
End Sub
'拡張子PDFに関連付けられているAcrobatReader起動
Private Sub DispPdf(ByVal strFileName As String)
Dim pStartInfo As New ProcessStartInfo
Dim p As New Process
With pStartInfo
.FileName = strFileName
.CreateNoWindow = False
.WindowStyle = ProcessWindowStyle.Normal
End With
'プロセスのStartInfoプロパティに設定
p.StartInfo = pStartInfo
If p.Start() = True Then
'AcrobatReaderの終了を待つ
p.WaitForExit()
Else
MsgBox("起動に失敗しました。")
End If
End Sub
End Class
下図は、プログラムが起動しした時の表示です。
下図は、「Button1」をクリックした時の表示です。
=====
2016/03/07:の時の情報
PR
コメント