作成日: 2020/06/17 最終更新日: 2020/08/26
文書種別
不具合
状況
修正済み
詳細
多数のスタイルが設定されているExcelファイルをインポートしてから、Cloneメソッドでシートをコピーするとスタイルの更新が正しく行われずに以下の例外が発生する場合があります。本現象はLegacyBehaviorsがStyleを含む場合に発生します。
System.IndexOutOfRangeException: 'インデックスが配列の境界外です。'
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadとButtonを貼り付け、インポートするExcelファイルを準備する。
2.下記サンプルコードを記述し、プロジェクトをデバック実行する。
3.画面のボタン押下してCloneメソッドによりシートを複製する。
※インポートするファイルに多くの設定がある場合、ここで例外が発生します。
■サンプルコード(VB.NET)
System.IndexOutOfRangeException: 'インデックスが配列の境界外です。'
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadとButtonを貼り付け、インポートするExcelファイルを準備する。
2.下記サンプルコードを記述し、プロジェクトをデバック実行する。
3.画面のボタン押下してCloneメソッドによりシートを複製する。
※インポートするファイルに多くの設定がある場合、ここで例外が発生します。
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.OpenExcel("..¥¥..¥¥Book1.xlsx")
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim addSheet As List(Of FarPoint.Win.Spread.SheetView) = New List(Of FarPoint.Win.Spread.SheetView)()
For Each item As FarPoint.Win.Spread.SheetView In FpSpread1.Sheets
addSheet.Add(item.Clone()) '現象発生
Next
For Each item As FarPoint.Win.Spread.SheetView In FpSpread1.Sheets
item.SheetName = DateTime.Now.ToString("HHmmss") + item.SheetName
Next
FpSpread1.Sheets.AddRange(addSheet)
End Sub
FpSpread1.OpenExcel("..¥¥..¥¥Book1.xlsx")
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim addSheet As List(Of FarPoint.Win.Spread.SheetView) = New List(Of FarPoint.Win.Spread.SheetView)()
For Each item As FarPoint.Win.Spread.SheetView In FpSpread1.Sheets
addSheet.Add(item.Clone()) '現象発生
Next
For Each item As FarPoint.Win.Spread.SheetView In FpSpread1.Sheets
item.SheetName = DateTime.Now.ToString("HHmmss") + item.SheetName
Next
FpSpread1.Sheets.AddRange(addSheet)
End Sub
回避方法
Service Pack 5(v12.0.4508.2012)で修正済み。
Service Pack を適用せずに対処する場合、親のスタイルを一時的に退避させてからnullに設定し、Cloneメソッドを呼び出した後で親のスタイルを戻すことにより回避可能です。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する場合、親のスタイルを一時的に退避させてからnullに設定し、Cloneメソッドを呼び出した後で親のスタイルを戻すことにより回避可能です。
■サンプルコード(VB.NET)
For Each item As FarPoint.Win.Spread.SheetView In FpSpread1.Sheets
'addSheet.Add(item.Clone()) '現象発生
'--回避方法----
Dim a = (CType(item.Models.Style, FarPoint.Win.Spread.Model.DefaultSheetStyleModel)).Parent
CType(item.Models.Style, FarPoint.Win.Spread.Model.DefaultSheetStyleModel).Parent = Nothing
Dim b = item.Clone()
addSheet.Add(b)
CType(item.Models.Style, FarPoint.Win.Spread.Model.DefaultSheetStyleModel).Parent = a
'--------------
Next
'addSheet.Add(item.Clone()) '現象発生
'--回避方法----
Dim a = (CType(item.Models.Style, FarPoint.Win.Spread.Model.DefaultSheetStyleModel)).Parent
CType(item.Models.Style, FarPoint.Win.Spread.Model.DefaultSheetStyleModel).Parent = Nothing
Dim b = item.Clone()
addSheet.Add(b)
CType(item.Models.Style, FarPoint.Win.Spread.Model.DefaultSheetStyleModel).Parent = a
'--------------
Next
旧文書番号
85721