ファイル保存の処理
簡単ですが、基本的な機能は組み込んだので、次に入力データをファイルに保存する処理を実装します。この処理はとても簡単で、メソッドを実行するだけです。ボタンコントロールを配置し、このクリックイベントハンドラに次のコードを入力します。
FpSpread1.SaveExcel("C:\myspread.xls", _
FarPoint.Win.Spread.Model.IncludeHeaders.BothCustomOnly)
FpSpreadコンポーネントでは、コンポーネントへの入力データを次の3つの形式でファイルに保存できます。
- Spread XMLファイル、またはストリーム
- Excel 形式ファイル(ワークブック全体または特定のシート)
- ASCIIテキストファイル(ファイル全体またはセル範囲)
それぞれ、FpSpread
クラスのメソッドを利用して保存しますが、今回はExcelのブックと互換性のある形式で保存することにします。
これには、SaveExcel
メソッドを使用します。引数は2つで、保存するファイル名と保存する際にデータと共にヘッダを保存するかどうかを、IncludeHeaders
列挙型のメンバで指定します。
メンバ | 説明 |
None | 列ヘッダも行ヘッダも含めません。 |
ColumnHeadersCustomOnly | 列ヘッダのカスタムヘッダのみを含めます。 |
RowHeadersCustomOnly | 行ヘッダのカスタムヘッダのみを含めます。 |
BothCustomOnly | 列ヘッダと行ヘッダのカスタムヘッダのみを含めます。 |
シートをもう1枚追加する処理
では、同じシートをもう1枚追加する処理を、今度はコードから行ってみます。シートの作成は、SheetView
オブジェクトを作成してSheetViewCollection
コレクションに追加する、という手順で行います。
コレクションに追加する前にシートの設定を行います。以降、デザイナで行った内容をコードから行ってみます。
- シートの作成
- シート名と行列数の設定
- 行列見出しの変更
- スキンの設定
-
SUM
関数の組み込み - セルのコピー&ペースト
シートの作成
新しいシートは、SheetView
クラスのコンストラクタで作成します。引数はありませんが、コンストラクタが返すインスタンスへの参照を変数で受け取っておきます。
Dim newsheet As New FarPoint.Win.Spread.SheetView()
後は、この変数名で各種設定を変更します。
シート名と行列数の設定
シート名はSheetName
プロパティで、行列数はそれぞれRowCount
、ColumnCount
プロパティの値で指定します。
With newsheet .SheetName = "Sheet" & i .RowCount = 11 .ColumnCount = 5
行列見出しの変更
行見出しの変更は、Columns
プロパティの引数に列番号を指定し、Label
プロパティの値を変更します。列番号は0から始まりますから注意してください。
.Columns(0).Label = "山田" .Columns(1).Label = "鈴木" .Columns(2).Label = "田中" .Columns(3).Label = "斉藤" .Columns(4).Label = "渡辺"
行番号は、Rows
プロパティの引数に行番号を指定し、Label
プロパティの値を変更します。列番号と同様に行番号も0から始まりますので注意してください。
.Rows(10).Label = "合計"
スキンの設定
スキンは、Sheet1に設定したものをそのまま適用します。スキンはSheetSkin
オブジェクトになっているので、FpSpread1_Sheet1
オブジェクトのActiveSkin
プロパティから取得し、新しいシートのActiveSkin
プロパティに設定します。
Dim sk As FarPoint.Win.Spread.SheetSkin = _ Me.FpSpread1_Sheet1.ActiveSkin .ActiveSkin = sk
SUM関数の組み込み
SUM
関数の組み込みは、Cells
プロパティで組み込むセルを指定し、Formula
プロパティに文字列で式を設定します。
.Cells(10, 0).Formula = "SUM(A1:A10)"
Cells
プロパティの引数には行列番号を指定しますが、いずれも0番から始まりますので注意してください。
セルのコピーペースト
SUM
関数の式を設定したら、このセルを他の人の合計用セルにコピー&ペーストします。
しかし、このコピー・ペーストはクリップボードを経由して行うようになっており、このクリップボード処理も[アクティブなシートのアクティブなセル]という指定でないとできないようになっているので、少し工夫が必要になります。クリップボードの処理は、.NET FrameWorkクラスライブラリのClipBoard
クラスの各機能を使用します。
まず、FpSpread1
クラスのActiveSheet
プロパティに追加したシートを設定し、このシートをアクティブにします。次に、アクティブシートのSetActiveCell
メソッドで、コピー元のセルを指定します。
With Me.FpSpread1 .ActiveSheet = newsheet .ActiveSheet.SetActiveCell(10, 0)
そして、ClipboardCopy
メソッドを実行し、クリップボードにコピーします。
.ActiveSheet.ClipboardCopy()
今度は、コピー先のセルをアクティブにします。
.ActiveSheet.SetActiveCell(10, 1)
そして、クリップボードの中身をペーストします。
.ActiveSheet.ClipboardPaste()
同じように、他のセルにもクリップボードの中身をペーストします。
.ActiveSheet.SetActiveCell(10, 2) .ActiveSheet.ClipboardPaste() .ActiveSheet.SetActiveCell(10, 3) .ActiveSheet.ClipboardPaste() .ActiveSheet.SetActiveCell(10, 4) .ActiveSheet.ClipboardPaste()
これで、ボタン[シートの追加]を押すたびに、Sheet1と同じシートが追加されていきます。
まとめ
簡単な機能ですが、独自の表計算機能を自作のプログラムに実装してみました。まだまだ、いろいろな機能をたくさん持っているコンポーネントなので、次回以降、さまざまな機能拡張を紹介していきたいと思います。