作成日: 2018/05/11 最終更新日: 2018/05/11
文書種別
不具合
状況
修正済み
詳細
セルをロックしている場合、そのセルの値をUI上で変更することはできません。
しかしながら、旧バージョン(10.0J以前)ではセルがロックされていても、コード上からセルの値(そのセルにマッピングされているデータモデルの値を含む)を変更することができました。
11.0Jの初版では、セルがロックされている場合、コード上からも変更(値のクリアを含む)することができません。
■セルの値が更新されない実装例(VB.NET)(★:11.0Jの初版で有効に動作しない箇所)
しかしながら、旧バージョン(10.0J以前)ではセルがロックされていても、コード上からセルの値(そのセルにマッピングされているデータモデルの値を含む)を変更することができました。
11.0Jの初版では、セルがロックされている場合、コード上からも変更(値のクリアを含む)することができません。
■セルの値が更新されない実装例(VB.NET)(★:11.0Jの初版で有効に動作しない箇所)
' シートの保護前にセルに値を設定します。
For i As Integer = 0 To 11
Me.FpSpread1.ActiveSheet.Cells(i, 0).Text = i.ToString()
Next
' シートを保護します。
' ※11.0Jの場合、デフォルト設定ですべてのセルがロックされます。
Me.FpSpread1.ActiveSheet.Protect = True
' ★セルの値を変更します。
Me.FpSpread1.ActiveSheet.Cells(0, 1).Text = "test1"
Me.FpSpread1.ActiveSheet.Cells(1, 1).Value = "test2"
Me.FpSpread1.ActiveSheet.SetText(2, 1, "test3")
Me.FpSpread1.ActiveSheet.SetValue(3, 1, "test4")
Me.FpSpread1.ActiveSheet.SetArray(4, 1, New String(,) {{"test5-1", "test5-2"}})
' ★セルの式を設定します。(例外が発生します。)
'On Error Resume Next
Me.FpSpread1.ActiveSheet.Cells(5, 1).Formula = "A2+A3"
Me.FpSpread1.ActiveSheet.SetFormula(5, 2, "A2+A3")
' ★セルの値を交換・移動します。(例外が発生します。)
Me.FpSpread1.ActiveSheet.SwapRange(3, 0, 5, 0, 2, 1, False)
Me.FpSpread1.ActiveSheet.MoveRange(7, 0, 0, 2, 1, 1, False)
'On Error GoTo 0
' ★セルの値をクリアします
Me.FpSpread1.ActiveSheet.ClearRange(0, 0, 1, 1, True)
Dim irs As FarPoint.Win.Spread.Model.IRangeSupport
irs = FpSpread1.ActiveSheet.Models.Data
Dim dtm As FarPoint.Win.Spread.Model.DefaultSheetDataModel
dtm = FpSpread1.ActiveSheet.Models.Data
With Me.FpSpread1.ActiveSheet
' ★データモデルを使用してセルに値を設定します
dtm.SetValue(.GetModelRowFromViewRow(6), .GetModelColumnFromViewColumn(1), "test6")
dtm.SetArray(.GetModelRowFromViewRow(7), .GetModelColumnFromViewColumn(1), _
New String(,) {{"test7-1", "test7-2"}})
' ★データモデルを使用してセルの値を移動します
dtm.Move(.GetModelRowFromViewRow(11), .GetModelColumnFromViewColumn(0),
.GetModelRowFromViewRow(8), .GetModelColumnFromViewColumn(1), 1, 1)
' ★データモデルを使用してセルの値をクリアします。
irs.Clear(.GetModelRowFromViewRow(8), .GetModelColumnFromViewColumn(0), 1, 1)
dtm.Clear(.GetModelRowFromViewRow(9), .GetModelColumnFromViewColumn(0), 1, 1)
dtm.ClearData(.GetModelRowFromViewRow(10), .GetModelColumnFromViewColumn(0), 1, 1)
End With
For i As Integer = 0 To 11
Me.FpSpread1.ActiveSheet.Cells(i, 0).Text = i.ToString()
Next
' シートを保護します。
' ※11.0Jの場合、デフォルト設定ですべてのセルがロックされます。
Me.FpSpread1.ActiveSheet.Protect = True
' ★セルの値を変更します。
Me.FpSpread1.ActiveSheet.Cells(0, 1).Text = "test1"
Me.FpSpread1.ActiveSheet.Cells(1, 1).Value = "test2"
Me.FpSpread1.ActiveSheet.SetText(2, 1, "test3")
Me.FpSpread1.ActiveSheet.SetValue(3, 1, "test4")
Me.FpSpread1.ActiveSheet.SetArray(4, 1, New String(,) {{"test5-1", "test5-2"}})
' ★セルの式を設定します。(例外が発生します。)
'On Error Resume Next
Me.FpSpread1.ActiveSheet.Cells(5, 1).Formula = "A2+A3"
Me.FpSpread1.ActiveSheet.SetFormula(5, 2, "A2+A3")
' ★セルの値を交換・移動します。(例外が発生します。)
Me.FpSpread1.ActiveSheet.SwapRange(3, 0, 5, 0, 2, 1, False)
Me.FpSpread1.ActiveSheet.MoveRange(7, 0, 0, 2, 1, 1, False)
'On Error GoTo 0
' ★セルの値をクリアします
Me.FpSpread1.ActiveSheet.ClearRange(0, 0, 1, 1, True)
Dim irs As FarPoint.Win.Spread.Model.IRangeSupport
irs = FpSpread1.ActiveSheet.Models.Data
Dim dtm As FarPoint.Win.Spread.Model.DefaultSheetDataModel
dtm = FpSpread1.ActiveSheet.Models.Data
With Me.FpSpread1.ActiveSheet
' ★データモデルを使用してセルに値を設定します
dtm.SetValue(.GetModelRowFromViewRow(6), .GetModelColumnFromViewColumn(1), "test6")
dtm.SetArray(.GetModelRowFromViewRow(7), .GetModelColumnFromViewColumn(1), _
New String(,) {{"test7-1", "test7-2"}})
' ★データモデルを使用してセルの値を移動します
dtm.Move(.GetModelRowFromViewRow(11), .GetModelColumnFromViewColumn(0),
.GetModelRowFromViewRow(8), .GetModelColumnFromViewColumn(1), 1, 1)
' ★データモデルを使用してセルの値をクリアします。
irs.Clear(.GetModelRowFromViewRow(8), .GetModelColumnFromViewColumn(0), 1, 1)
dtm.Clear(.GetModelRowFromViewRow(9), .GetModelColumnFromViewColumn(0), 1, 1)
dtm.ClearData(.GetModelRowFromViewRow(10), .GetModelColumnFromViewColumn(0), 1, 1)
End With
回避方法
Service Pack 1(v11.0.4502.2012)で修正済み。
Service Pack 1を適用せずに対処する方法としては、セルの値を編集する前に、一旦シートの保護を解除(SheetViewクラスのProtectプロパティを"False"に変更)し、セルの値を変更後、再度シートを保護する以外に有効な方法はございません。
Service Pack 1を適用せずに対処する方法としては、セルの値を編集する前に、一旦シートの保護を解除(SheetViewクラスのProtectプロパティを"False"に変更)し、セルの値を変更後、再度シートを保護する以外に有効な方法はございません。
旧文書番号
41786