【操作】 フィルタで絞り込みを行った状態のシートをコピーするとエラーが発生する
対象製品
SPREAD for ASP.NET 7.0J
状況
修正済み
詳細
フィルタで絞り込みを行った状態のシートをコピーするとエラーが発生します。
【再現手順】
1.新規WebフォームにSPREADひとつ、ボタンひとつを配置します
2.下記の再現コードを貼り付け、Web フォームを起動します
3.ヘッダ上に表示される絞り込み用のボタンをクリックし、フィルタリングを行います
4.ボタンを押下します
--- エラーが発生し、シートのコピーに失敗します
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' Sheet1の初期設定
FpSpread1.Sheets(0).AutoFilterMode = FarPoint.Web.Spread.AutoFilterMode.Enhanced
Dim sf1 As New FarPoint.Web.Spread.HideRowFilter(FpSpread1.Sheets(0))
sf1.AddColumn(New FarPoint.Web.Spread.FilterColumnDefinition(0))
FpSpread1.Sheets(0).RowFilter = sf1
For i As Integer = 0 To FpSpread1.Sheets(0).RowCount - 1
FpSpread1.Sheets(0).SetValue(i, 0, String.Format("A{0}", i + 1))
FpSpread1.Sheets(0).SetValue(i, 1, String.Format("B{0}", i + 1))
Next
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' クライアント側の変更を確定
FpSpread1.SaveChanges()
' シートのコピー
Using ms2 As New System.IO.MemoryStream()
FpSpread1.Sheets(0).Save(ms2, False)
ms2.Position = 0
Dim sheet As New FarPoint.Web.Spread.SheetView()
sheet.Open(ms2)
sheet.SheetName = "Sheet2"
FpSpread1.Sheets.Add(sheet)
If ms2 IsNot Nothing Then ms2.Close()
End Using
End Sub
End Class
【再現手順】
1.新規WebフォームにSPREADひとつ、ボタンひとつを配置します
2.下記の再現コードを貼り付け、Web フォームを起動します
3.ヘッダ上に表示される絞り込み用のボタンをクリックし、フィルタリングを行います
4.ボタンを押下します
--- エラーが発生し、シートのコピーに失敗します
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' Sheet1の初期設定
FpSpread1.Sheets(0).AutoFilterMode = FarPoint.Web.Spread.AutoFilterMode.Enhanced
Dim sf1 As New FarPoint.Web.Spread.HideRowFilter(FpSpread1.Sheets(0))
sf1.AddColumn(New FarPoint.Web.Spread.FilterColumnDefinition(0))
FpSpread1.Sheets(0).RowFilter = sf1
For i As Integer = 0 To FpSpread1.Sheets(0).RowCount - 1
FpSpread1.Sheets(0).SetValue(i, 0, String.Format("A{0}", i + 1))
FpSpread1.Sheets(0).SetValue(i, 1, String.Format("B{0}", i + 1))
Next
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' クライアント側の変更を確定
FpSpread1.SaveChanges()
' シートのコピー
Using ms2 As New System.IO.MemoryStream()
FpSpread1.Sheets(0).Save(ms2, False)
ms2.Position = 0
Dim sheet As New FarPoint.Web.Spread.SheetView()
sheet.Open(ms2)
sheet.SheetName = "Sheet2"
FpSpread1.Sheets.Add(sheet)
If ms2 IsNot Nothing Then ms2.Close()
End Using
End Sub
End Class
回避方法
Service Pack 3(v7.0.4017.2010)で修正済み。
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
新しいシートをコントロールに追加の上、既存シートからのコピーを実施することで現象の回避が可能です。
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' Sheet1の初期設定
FpSpread1.Sheets(0).AutoFilterMode = FarPoint.Web.Spread.AutoFilterMode.Enhanced
Dim sf1 As New FarPoint.Web.Spread.HideRowFilter(FpSpread1.Sheets(0))
sf1.AddColumn(New FarPoint.Web.Spread.FilterColumnDefinition(0))
FpSpread1.Sheets(0).RowFilter = sf1
For i As Integer = 0 To FpSpread1.Sheets(0).RowCount - 1
FpSpread1.Sheets(0).SetValue(i, 0, String.Format("A{0}", i + 1))
FpSpread1.Sheets(0).SetValue(i, 1, String.Format("B{0}", i + 1))
Next
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' クライアント側の変更を確定
FpSpread1.SaveChanges()
' シートのコピー
Using ms2 As New System.IO.MemoryStream()
FpSpread1.Sheets(0).Save(ms2, False)
ms2.Position = 0
Dim sheet As New FarPoint.Web.Spread.SheetView()
FpSpread1.Sheets(0).SheetName = "temp" 'シート名の重複を避けるためリネーム
FpSpread1.Sheets.Add(sheet)
sheet.Open(ms2)
sheet.SheetName = "Sheet2"
FpSpread1.Sheets(0).SheetName = "Sheet1" 'シート名を戻す
If ms2 IsNot Nothing Then ms2.Close()
End Using
End Sub
End Class
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
新しいシートをコントロールに追加の上、既存シートからのコピーを実施することで現象の回避が可能です。
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' Sheet1の初期設定
FpSpread1.Sheets(0).AutoFilterMode = FarPoint.Web.Spread.AutoFilterMode.Enhanced
Dim sf1 As New FarPoint.Web.Spread.HideRowFilter(FpSpread1.Sheets(0))
sf1.AddColumn(New FarPoint.Web.Spread.FilterColumnDefinition(0))
FpSpread1.Sheets(0).RowFilter = sf1
For i As Integer = 0 To FpSpread1.Sheets(0).RowCount - 1
FpSpread1.Sheets(0).SetValue(i, 0, String.Format("A{0}", i + 1))
FpSpread1.Sheets(0).SetValue(i, 1, String.Format("B{0}", i + 1))
Next
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' クライアント側の変更を確定
FpSpread1.SaveChanges()
' シートのコピー
Using ms2 As New System.IO.MemoryStream()
FpSpread1.Sheets(0).Save(ms2, False)
ms2.Position = 0
Dim sheet As New FarPoint.Web.Spread.SheetView()
FpSpread1.Sheets(0).SheetName = "temp" 'シート名の重複を避けるためリネーム
FpSpread1.Sheets.Add(sheet)
sheet.Open(ms2)
sheet.SheetName = "Sheet2"
FpSpread1.Sheets(0).SheetName = "Sheet1" 'シート名を戻す
If ms2 IsNot Nothing Then ms2.Close()
End Using
End Sub
End Class