忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

VB.NET:Spread(GrapeCity)異なるSPREADコントロール間でシートデータのコピーを行う方法
異なるSPREADのシート間でのコピーを行う方法が2種類あります。 一つはクリップボードを使う方法と、XML文字列を使う方法です。

■クリップボードを使う方法
コピー元のActiveSheetの「ClipboardCopy」メソッドを使うことで、指定された範囲のセルをクリップボードにコピーします。 その後、コピー先のActiveSheetの行・列の数を合わせておいて、「ClipboardPaste」メソッドで貼付を行います。 以下のソースでは、「Button1_Click」の処理です。

■XML文字列を使う方法
コピー元のシートを「GetObjectXml」メソッドにてシリアライズ化しXML文字列化します。 その後、コピー先のシートに「SetObjectXml」メソッドにてXML文字列を逆シリアライズ化してやります。 以下のソースでは、「Button2_Click」の処理です。
尚、ここではやっていませんが、数式を含むシートの場合には、シートの追加後にLoadFormulasメソッドを呼び出すことで数式が有効になるそうです。

Imports FarPoint.Win.Spread
Public Class Form1
    'フォームロード時にSPREADの初期化
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'SPREADの初期化
        Call InitilayzeSpread(Me.FpSpread1)
        Call InitilayzeSpread(Me.FpSpread2)
        '一覧データ表示
        Call Me.DisplayData()
    End Sub

    'SPREADの初期化
    Private Sub InitilayzeSpread(ByVal spd As FpSpread)
        'SPREADの設定
        With spd
            'スクロールバーの設定
            .HorizontalScrollBarPolicy = ScrollBarPolicy.AsNeeded
            .VerticalScrollBarPolicy = ScrollBarPolicy.AsNeeded
            '分割ボックスの設定
            .ColumnSplitBoxPolicy = SplitBoxPolicy.Never
            .RowSplitBoxPolicy = SplitBoxPolicy.Never
            'カーソル設定
            .SetCursor(CursorType.Normal, Windows.Forms.Cursors.Arrow)
            .SetCursor(CursorType.LockedCell, Windows.Forms.Cursors.Arrow)
            'セルがアクティブ時に編集モードにしない
            .EditModePermanent = False
            'セルがアクティブ時に既存の内容を選択しない
            .EditModeReplace = False
        End With
        'アクティブシートの設定
        With spd.ActiveSheet
            '選択状態
            .SelectionStyle = SelectionStyles.SelectionRenderer
            '編集モードの設定
            .OperationMode = OperationMode.SingleSelect
            '列のサイズ変更可、行のサイズ変更不可に設定する。
            .Columns.Default.Resizable = True
            .Rows.Default.Resizable = False
            'SPREADのアクティブシートのカラム数を3に設定
            .ColumnCount = 3
            'SPREADの行クリア
            .RowCount = 0
        End With
    End Sub

    '一覧データ表示
    Private Sub DisplayData()
        'ソースが長くなるのでWith宣言
        With Me.FpSpread1.ActiveSheet
            '描画を停止させる
            Me.FpSpread1.SuspendLayout()
            'データの行数分の処理
            For i As Integer = 0 To 999
                '行数を増やす
                .RowCount += 1
                '各セルへのデータ設定
                .SetText(i, 0, "A" & i.ToString("000"))
                .SetText(i, 1, "B" & (i Mod 100).ToString("000")) '100で割った余り
                .SetText(i, 2, "C" & (i Mod 10).ToString("000")) '10で割った余り
            Next
        End With
        '描画を再開させる
        Me.FpSpread1.ResumeLayout(True)
        '先頭行を選択設定(1行目が選択色になる)
        Me.FpSpread1.ActiveSheet.AddSelection(0, 0, 1, 1)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
                                               Handles Button1.Click
        'SPREAD1の全部をクリップボードにコピー
        With Me.FpSpread1.ActiveSheet
            .ClipboardCopy(New Model.CellRange(0, 0, .RowCount, .ColumnCount))
        End With
        'SPREAD2
        With Me.FpSpread2.ActiveSheet
            'SPREAD2の行列数を設定
            .RowCount = Me.FpSpread1.ActiveSheet.RowCount
            .ColumnCount = Me.FpSpread1.ActiveSheet.ColumnCount
            'SPREAD2にペースト
            .SetActiveCell(0, 0)
            .ClipboardPaste(FarPoint.Win.Spread.ClipboardPasteOptions.All)
            'SPREAD2の選択状態を解除
            .ClearSelection()
        End With
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
                                               Handles Button2.Click
        Dim pstrXML As String
        'Sheet情報をxml形式で取得
        pstrXML = FarPoint.Win.Serializer.GetObjectXml
                      (CType(Me.FpSpread1.ActiveSheet, FarPoint.Win.ISerializeSupport), "Sheet")
        '取得した情報を設定
        FarPoint.Win.Serializer.SetObjectXml
                      (CType(Me.FpSpread2.ActiveSheet, FarPoint.Win.ISerializeSupport), pstrXML, "Sheet")
    End Sub
End Class

下図は、プログラムが起動した時の表示です。

下図は、「Button2」をクリック後の表示です。「Button1」と「Button2」では若干結果が異なります。 「Button1」では行選択状態はコピーされず、左上のセルがアクティブになります。 「Button2」は行選択状態もコピーされる様です。



=====
2016/03/05:の時の情報











PR

コメント

コメントを書く