作成日: 2018/05/11 最終更新日: 2018/05/11
文書種別
不具合
状況
修正済み
詳細
ロックされているセルを含む行または列を削除(または削除を伴うようなRowCount/ColumnCountプロパティの変更)を行うと、以下のエラーが発生します。
============================================
System.ArgumentException: 行数の変更中に例外が発生しました。
============================================
■再現サンプルコード(C#)
デフォルト状態のSPREADは500行×500列で構成されているので、上記のサンプルコードのように10行×10行に変更しようとすると、ロックされているセルを含む行・列を削除することになります。
また、本事象は、FpSpreadクラスのDataSourceプロパティを使用して、データ連結を行う場合にも発生します。たとえば、以下のコードのように、1行1列のDataTableをDataSourceプロパティに設定した場合、ロックされているセルを含む行・列を削除することになるため、同じエラーが発生します。
■再現サンプルコード(VB.NET)
============================================
System.ArgumentException: 行数の変更中に例外が発生しました。
============================================
■再現サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
// シートを保護します。
// ※11.0Jの場合、デフォルト設定ではすべてのセルがロックされます。
fpSpread1.ActiveSheet.Protect = true;
// 行・列数を設定します。
fpSpread1.ActiveSheet.RowCount = 10;
fpSpread1.ActiveSheet.ColumnCount = 10;
}
{
// シートを保護します。
// ※11.0Jの場合、デフォルト設定ではすべてのセルがロックされます。
fpSpread1.ActiveSheet.Protect = true;
// 行・列数を設定します。
fpSpread1.ActiveSheet.RowCount = 10;
fpSpread1.ActiveSheet.ColumnCount = 10;
}
デフォルト状態のSPREADは500行×500列で構成されているので、上記のサンプルコードのように10行×10行に変更しようとすると、ロックされているセルを含む行・列を削除することになります。
また、本事象は、FpSpreadクラスのDataSourceプロパティを使用して、データ連結を行う場合にも発生します。たとえば、以下のコードのように、1行1列のDataTableをDataSourceプロパティに設定した場合、ロックされているセルを含む行・列を削除することになるため、同じエラーが発生します。
■再現サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' シートを保護します。
' (11.0Jのデフォルト設定では、すべてのセルがロックされます。)
Me.FpSpread1.ActiveSheet.Protect = True
' サンプルデータを生成します。
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(String))
dt.Rows.Add("test1")
dt.AcceptChanges()
' 生成したデータをSPREADに連結します。(ここでエラーが発生します。)
Me.FpSpread1.DataSource = dt
End Sub
' シートを保護します。
' (11.0Jのデフォルト設定では、すべてのセルがロックされます。)
Me.FpSpread1.ActiveSheet.Protect = True
' サンプルデータを生成します。
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(String))
dt.Rows.Add("test1")
dt.AcceptChanges()
' 生成したデータをSPREADに連結します。(ここでエラーが発生します。)
Me.FpSpread1.DataSource = dt
End Sub
回避方法
Service Pack 1(v11.0.4502.2012)で修正済み。
Service Pack 1を適用せずに対処する方法としては、行・列数を設定する前(およびDataSourceプロパティにデータオブジェクトを設定する前)に、一旦シートの保護を解除(SheetViewクラスのProtectプロパティを"False"に変更)し、設定を変更した後、再度シートを保護する以外に有効な方法はございません。
Service Pack 1を適用せずに対処する方法としては、行・列数を設定する前(およびDataSourceプロパティにデータオブジェクトを設定する前)に、一旦シートの保護を解除(SheetViewクラスのProtectプロパティを"False"に変更)し、設定を変更した後、再度シートを保護する以外に有効な方法はございません。
旧文書番号
41791