コピーしたシートに印刷タイトル行設定が反映されない
対象製品
SPREAD for ASP.NET 8.0J
状況
修正済み
詳細
コピーで生成されたシートのExcel出力時、印刷タイトル行設定が反映されない現象が発生します。
【再現手順】
1.新規WebフォームにSPREADとボタンコントロールを配置し、下記の再現コードを貼り付ける。
2.プロジェクトフォルダに添付のExcelファイルを配置する
3.プロジェクトを起動し、ボタンを押下する
--- 出力されたExcelファイルのシート2に印刷タイトル行が設定されていない。
--- インポートしたExcelファイルのシートには印刷タイトル行が設定されており、
シート2はこれをコピーして生成されたものなので、印刷タイトル行も設定されている状態が正常な動作です。
【再現コード】
------------------------------------
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
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Call Test2()
End Sub
Private Sub Test2()
' Excelファイルの読み込み
FpSpread1.OpenExcel(MapPath("Book3.xlsx"))
' シートのコピー
Dim newSheet As New FarPoint.Web.Spread.SheetView()
CopySheet(FpSpread1.Sheets(0), newSheet)
newSheet.SheetName = "Test"
FpSpread1.Sheets.Add(newSheet)
' Excelファイルの出力
FpSpread1.SaveExcelToResponse("text2.xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat)
End Sub
Private Sub CopySheet(ByVal src As FarPoint.Web.Spread.SheetView, ByVal dest As FarPoint.Web.Spread.SheetView)
' シートの状態をメモリに上に書き出す
Dim ms As New System.IO.MemoryStream
Dim sw As New System.IO.StreamWriter(ms)
Dim tw As New System.Xml.XmlTextWriter(sw)
CType(src, FarPoint.Web.Spread.Model.ISerializeSupport).Serialize(tw)
tw.Flush()
Dim bytes As Byte() = ms.ToArray()
ms = New System.IO.MemoryStream(bytes)
' シートの状態を新しいシートに読み込む
Dim sr As New System.IO.StreamReader(ms)
sr.BaseStream.Position = 0
Dim xml As String = "<X>" & sr.ReadToEnd() & "</X>"
Dim doc As New System.Xml.XmlDocument
doc.LoadXml(xml)
Dim nr As New System.Xml.XmlNodeReader(doc.FirstChild)
CType(dest, FarPoint.Web.Spread.Model.ISerializeSupport).Deserialize(nr)
End Sub
End Class
【再現手順】
1.新規WebフォームにSPREADとボタンコントロールを配置し、下記の再現コードを貼り付ける。
2.プロジェクトフォルダに添付のExcelファイルを配置する
3.プロジェクトを起動し、ボタンを押下する
--- 出力されたExcelファイルのシート2に印刷タイトル行が設定されていない。
--- インポートしたExcelファイルのシートには印刷タイトル行が設定されており、
シート2はこれをコピーして生成されたものなので、印刷タイトル行も設定されている状態が正常な動作です。
【再現コード】
------------------------------------
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
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Call Test2()
End Sub
Private Sub Test2()
' Excelファイルの読み込み
FpSpread1.OpenExcel(MapPath("Book3.xlsx"))
' シートのコピー
Dim newSheet As New FarPoint.Web.Spread.SheetView()
CopySheet(FpSpread1.Sheets(0), newSheet)
newSheet.SheetName = "Test"
FpSpread1.Sheets.Add(newSheet)
' Excelファイルの出力
FpSpread1.SaveExcelToResponse("text2.xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat)
End Sub
Private Sub CopySheet(ByVal src As FarPoint.Web.Spread.SheetView, ByVal dest As FarPoint.Web.Spread.SheetView)
' シートの状態をメモリに上に書き出す
Dim ms As New System.IO.MemoryStream
Dim sw As New System.IO.StreamWriter(ms)
Dim tw As New System.Xml.XmlTextWriter(sw)
CType(src, FarPoint.Web.Spread.Model.ISerializeSupport).Serialize(tw)
tw.Flush()
Dim bytes As Byte() = ms.ToArray()
ms = New System.IO.MemoryStream(bytes)
' シートの状態を新しいシートに読み込む
Dim sr As New System.IO.StreamReader(ms)
sr.BaseStream.Position = 0
Dim xml As String = "<X>" & sr.ReadToEnd() & "</X>"
Dim doc As New System.Xml.XmlDocument
doc.LoadXml(xml)
Dim nr As New System.Xml.XmlNodeReader(doc.FirstChild)
CType(dest, FarPoint.Web.Spread.Model.ISerializeSupport).Deserialize(nr)
End Sub
End Class
回避方法
Service Pack 3(v8.0.4004.2010)で修正済み。
Service Pack 3(v8.0.4004.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
OpenXML形式ではなく、BIFF8形式にしてエクスポート処理を行います。
FpSpread1.SaveExcelToResponse("text2.xls")
Service Pack 3(v8.0.4004.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
OpenXML形式ではなく、BIFF8形式にしてエクスポート処理を行います。
FpSpread1.SaveExcelToResponse("text2.xls")