用紙サイズにA3に設定してPDFファイルにエクスポートできない場合がある
対象製品
SPREAD for Windows Forms 7.0J
状況
修正済み
詳細
用紙サイズにA3に設定してPDFファイルにエクスポートすると以下のようなエラーメッセージが表示されPDFファイルに正しくエクスポートできない場合があります。
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
【手順】
1.新規フォームにSPREADとボタンを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.ボタンをクリックしてPDFファイルにエクスポートします
--エラーメッセージが表示されます
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.RowCount = 3
FpSpread1.ActiveSheet.ColumnCount = 123
FpSpread1.ActiveSheet.Cells(2, 18).ColumnSpan = 2
' テストデータの設定
Dim i As Integer, j As Integer
For i = 0 To FpSpread1.ActiveSheet.RowCount - 1
For j = 0 To FpSpread1.ActiveSheet.ColumnCount - 1
FpSpread1.ActiveSheet.Cells(i, j).Value = "test"
Next
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' PDFファイルに出力
Dim printset As New FarPoint.Win.Spread.PrintInfo()
printset.Orientation = FarPoint.Win.Spread.PrintOrientation.Landscape
printset.RepeatColEnd = 23
printset.RepeatColStart = 0
printset.RepeatRowEnd = 2
printset.RepeatRowStart = 0
printset.ZoomFactor = 0.65F
printset.PdfFileName = "..¥..¥test.pdf"
printset.PrintToPdf = True
printset.PaperSize = New System.Drawing.Printing.PaperSize("A3", 1169, 1654)
FpSpread1.Sheets(0).PrintInfo = printset
FpSpread1.PrintSheet(-1)
End Sub
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
【手順】
1.新規フォームにSPREADとボタンを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.ボタンをクリックしてPDFファイルにエクスポートします
--エラーメッセージが表示されます
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.RowCount = 3
FpSpread1.ActiveSheet.ColumnCount = 123
FpSpread1.ActiveSheet.Cells(2, 18).ColumnSpan = 2
' テストデータの設定
Dim i As Integer, j As Integer
For i = 0 To FpSpread1.ActiveSheet.RowCount - 1
For j = 0 To FpSpread1.ActiveSheet.ColumnCount - 1
FpSpread1.ActiveSheet.Cells(i, j).Value = "test"
Next
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' PDFファイルに出力
Dim printset As New FarPoint.Win.Spread.PrintInfo()
printset.Orientation = FarPoint.Win.Spread.PrintOrientation.Landscape
printset.RepeatColEnd = 23
printset.RepeatColStart = 0
printset.RepeatRowEnd = 2
printset.RepeatRowStart = 0
printset.ZoomFactor = 0.65F
printset.PdfFileName = "..¥..¥test.pdf"
printset.PrintToPdf = True
printset.PaperSize = New System.Drawing.Printing.PaperSize("A3", 1169, 1654)
FpSpread1.Sheets(0).PrintInfo = printset
FpSpread1.PrintSheet(-1)
End Sub
回避方法
Service Pack 2(v7.0.2010.2008)で修正済み。
Service Pack 2(v7.0.2010.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
一時的に非表示行を追加し、PDFエクスポート後に追加した行を削除します。
【サンプルコード】
Private Sub FpSpread1_PrintMessageBox(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.PrintMessageBoxEventArgs) Handles FpSpread1.PrintMessageBox
If e.BeginPrinting Then
' 一時的に非表示行を追加
FpSpread1.ActiveSheet.AddRows(FpSpread1.ActiveSheet.RowCount, 1)
FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.RowCount - 1, 0).Text = "abc"
FpSpread1.ActiveSheet.Rows(FpSpread1.ActiveSheet.RowCount - 1).Visible = False
Else
' 追加した行を削除
FpSpread1.ActiveSheet.RemoveRows(FpSpread1.ActiveSheet.RowCount - 1, 1)
End If
End Sub
Service Pack 2(v7.0.2010.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
一時的に非表示行を追加し、PDFエクスポート後に追加した行を削除します。
【サンプルコード】
Private Sub FpSpread1_PrintMessageBox(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.PrintMessageBoxEventArgs) Handles FpSpread1.PrintMessageBox
If e.BeginPrinting Then
' 一時的に非表示行を追加
FpSpread1.ActiveSheet.AddRows(FpSpread1.ActiveSheet.RowCount, 1)
FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.RowCount - 1, 0).Text = "abc"
FpSpread1.ActiveSheet.Rows(FpSpread1.ActiveSheet.RowCount - 1).Visible = False
Else
' 追加した行を削除
FpSpread1.ActiveSheet.RemoveRows(FpSpread1.ActiveSheet.RowCount - 1, 1)
End If
End Sub