作成日: 2018/12/05 最終更新日: 2018/12/18
文書種別
不具合
状況
修正済み
詳細
■事象
結合セルを含む行の表示・非表示を切り替えた時、SPREADの表示内容が崩れます。
■再現コード(VB.NET)
■再現手順
結合セルを含む行の表示・非表示を切り替えた時、SPREADの表示内容が崩れます。
■再現コード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With FpSpread1.ActiveSheet
' 行・列数を設定します
.ColumnCount = 3
.RowCount = 7
' セルを結合します。
.AddSpanCell(0, 0, 1, 3)
.AddSpanCell(2, 0, 2, 3)
.AddSpanCell(4, 0, 2, 3)
.AddSpanCell(6, 0, 1, 3)
' セルに値を設定します。
.Cells(0, 0).Value = "A"
.Cells(1, 0).Value = "B"
.Cells(2, 0).Value = "C"
.Cells(4, 0).Value = "D"
.Cells(6, 0).Value = "E"
' すべてのセルに背景色を設定します。
.Cells(0, 0, .RowCount - 1, .ColumnCount - 1).BackColor = Color.Aqua
End With
End Sub
Private Sub FpSpread1_CellClick(sender As Object, e As CellClickEventArgs) Handles FpSpread1.CellClick
' セルをクリックした時に表示・非表示を切り替えます。
FpSpread1.ActiveSheet.Rows(e.Row).Visible = Not FpSpread1_Sheet1.Rows(e.Row).Visible
End Sub
With FpSpread1.ActiveSheet
' 行・列数を設定します
.ColumnCount = 3
.RowCount = 7
' セルを結合します。
.AddSpanCell(0, 0, 1, 3)
.AddSpanCell(2, 0, 2, 3)
.AddSpanCell(4, 0, 2, 3)
.AddSpanCell(6, 0, 1, 3)
' セルに値を設定します。
.Cells(0, 0).Value = "A"
.Cells(1, 0).Value = "B"
.Cells(2, 0).Value = "C"
.Cells(4, 0).Value = "D"
.Cells(6, 0).Value = "E"
' すべてのセルに背景色を設定します。
.Cells(0, 0, .RowCount - 1, .ColumnCount - 1).BackColor = Color.Aqua
End With
End Sub
Private Sub FpSpread1_CellClick(sender As Object, e As CellClickEventArgs) Handles FpSpread1.CellClick
' セルをクリックした時に表示・非表示を切り替えます。
FpSpread1.ActiveSheet.Rows(e.Row).Visible = Not FpSpread1_Sheet1.Rows(e.Row).Visible
End Sub
■再現手順
- 上記サンプルコードを実装したプロジェクトを実行します。

- 2行目("B”が表示されている行)をクリックします。
→クリックした行が非表示になります。

- 3行目または4行目("C"が表示されている行)をクリックします。
→3行目が非表示になります。

- 「手順3」と同じ行("C"が表示されている行)をクリックします。
→5行目以降のデータの表示やスタイル(背景色など)が意図しない状態になります。

参考:本来の表示内容(「手順2」の後の状態に戻る)

回避方法
Service Pack 2(v11.0.4503.2012)で修正済み。
Service Pack 2を適用せずに対処する方法としては、非表示の行を再表示する場合に「ResetVisibleメソッド」を実行する方法が有効です。たとえば、以下のようなコードになります。
■サンプルコード(VB.NET)
Service Pack 2を適用せずに対処する方法としては、非表示の行を再表示する場合に「ResetVisibleメソッド」を実行する方法が有効です。たとえば、以下のようなコードになります。
■サンプルコード(VB.NET)
Private Sub FpSpread1_CellClick(sender As Object, e As CellClickEventArgs) Handles FpSpread1.CellClick
' 切り替え前の行の表示状態を取得します。
Dim isVisible As Boolean = FpSpread1_Sheet1.Rows(e.Row).Visible
' 行の表示/非表示を切り替えます。
If (Not isVisible) Then
'【回避策】非表示状態から切り替える時のみ、ResetVisibleメソッドを実行します。
FpSpread1.ActiveSheet.Rows(e.Row).ResetVisible()
Else
FpSpread1.ActiveSheet.Rows(e.Row).Visible = Not isVisible
End If
End Sub
' 切り替え前の行の表示状態を取得します。
Dim isVisible As Boolean = FpSpread1_Sheet1.Rows(e.Row).Visible
' 行の表示/非表示を切り替えます。
If (Not isVisible) Then
'【回避策】非表示状態から切り替える時のみ、ResetVisibleメソッドを実行します。
FpSpread1.ActiveSheet.Rows(e.Row).ResetVisible()
Else
FpSpread1.ActiveSheet.Rows(e.Row).Visible = Not isVisible
End If
End Sub
旧文書番号
83444