シートをコピーしたい

文書番号 : 38012     文書種別 : 使用方法     登録日 : 2015/02/26     最終更新日 : 2015/02/26
文書を印刷する
対象製品
SPREAD for ASP.NET 8.0J
詳細
下記のようにシートをコピーした場合、Sheet1 とSheet2は同じシートオブジェクトを参照します。そのため、片方のシートを編集し内容を更新すると、もう一方のシートへも変更内容が反映されてしまいます。

 Sheet2 = Sheet1

下記のCopySheetメソッドのような方法でシートのコピーを作成することができます。

◎サンプルコード(VB)
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' クライアント側の変更を確定
  FpSpread1.SaveChanges()
  ' 新しいシートを作成
  Dim newSheet As New FarPoint.Web.Spread.SheetView
  ' Sheet1をコピー
  CopySheet(FpSpread1.Sheets(0), newSheet)
  ' 新しいシート固有の設定
  newSheet.SheetName = "Sheet2"
  newSheet.Cells(1, 1).Value = "Sheet2"
  ' シートを追加
  FpSpread1.Sheets.Add(newSheet)
  ' コピーしたシートに数式を追加する場合は、
  ' LoadFormulas メソッド実行後に数式を設定   FpSpread1.LoadFormulas(True)
  FpSpread1.Sheets(1).Cells(3, 0).Formula = "SUM(A1:A3)"
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

◎サンプルコード(C#)
protected void Button1_Click1(object sender, EventArgs e)
{
  // クライアント側の変更を確定
  FpSpread1.SaveChanges();
  // 新しいシートを作成
  FarPoint.Web.Spread.SheetView newSheet = new FarPoint.Web.Spread.SheetView();
  // Sheet1を新しいシートにコピー
  CopySheet(FpSpread1.Sheets[0], newSheet);
  // 新しいシート固有の設定
  newSheet.Cells[1, 1].Value = "Sheet2";
  newSheet.SheetName = "Sheet2";
  // シートを追加
  FpSpread1.Sheets.Add(newSheet);
  // コピーしたシートに数式を追加する場合は、
  // LoadFormulas メソッド実行後に数式を設定   FpSpread1.LoadFormulas(true);
  FpSpread1.Sheets[1].Cells[3, 0].Formula = "SUM(A1:A3)";
}

private void CopySheet(FarPoint.Web.Spread.SheetView src,FarPoint.Web.Spread.SheetView dest)
{
  // シートの状態をメモリ上に書き出す
  System.IO.MemoryStream ms=new System.IO.MemoryStream();
  System.IO.StreamWriter sw=new System.IO.StreamWriter(ms);
  System.Xml.XmlTextWriter tw=new System.Xml.XmlTextWriter(sw);
  ((FarPoint.Web.Spread.Model.ISerializeSupport)src).Serialize(tw);
  tw.Flush();
  Byte[] bytes=ms.ToArray();
  ms=new System.IO.MemoryStream(bytes);
  
  // シートの状態を新しいシートに読み込む
  System.IO.StreamReader sr=new System.IO.StreamReader(ms);
  sr.BaseStream.Position=0;
  string xml="<X>"+sr.ReadToEnd()+"</X>";
  System.Xml.XmlDocument doc=new System.Xml.XmlDocument();
  doc.LoadXml(xml);
  System.Xml.XmlNodeReader nr=new System.Xml.XmlNodeReader(doc.FirstChild);
  ((FarPoint.Web.Spread.Model.ISerializeSupport)dest).Deserialize(nr);
}
キーワード
全般