用紙サイズにA3に設定してPDFファイルにエクスポートできない場合がある

文書番号 : 36388     文書種別 : 不具合     登録日 : 2013/09/04     最終更新日 : 2014/01/28
文書を印刷する
対象製品
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
回避方法
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