シートをコピーしたい

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

 Sheet2 = Sheet1

下記のCopySheetメソッドを実行することでシートの完全なコピーを作成することができます。

  メモメモ
  • Ver 2.5.1004.2002/Ver 2.5.2004.2005以前では、以下の方法では数式の設定はコピーされません。コピー後再度数式の設定を行ってください。Service Pack(Ver 2.5.1007.2002/Ver 2.5.2007.2005)から以下の方法で数式の設定もコピーされます。
  • Service Pack(修正版)はこちらからダウンロードすることができます。

【VB サンプルコード】
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    '新しいシートを作成
    Dim newSheet As New FarPoint.Web.Spread.SheetView
    'Sheet1をコピー
    CopySheet(FpSpread1.Sheets(0), newSheet)
    '新しいシート固有の設定
    newSheet.Cells(1, 1).Value = "Sheet2"
    newSheet.SheetName = "Sheet2"
    'シートを追加
    FpSpread1.Sheets.Add(newSheet)
  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# サンプルコード】
    private void Button1_Click(object sender, System.EventArgs e)
    {
      //新しいシートを作成
      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);
    }

    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);
    }
キーワード
一般

この文書は、以前は次のFAQ IDで公開されていました : 9173