SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(SPREAD)

特定の用途に絞りこんだ計算ソフトの作成

SPREAD for .NET 2.5J Windows Forms Editionによる表計算機能の実装

  • このエントリーをはてなブックマークに追加

ファイル保存の処理

 簡単ですが、基本的な機能は組み込んだので、次に入力データをファイルに保存する処理を実装します。この処理はとても簡単で、メソッドを実行するだけです。ボタンコントロールを配置し、このクリックイベントハンドラに次のコードを入力します。

FpSpread1.SaveExcel("C:\myspread.xls", _
    FarPoint.Win.Spread.Model.IncludeHeaders.BothCustomOnly)

 FpSpreadコンポーネントでは、コンポーネントへの入力データを次の3つの形式でファイルに保存できます。

  • Spread XMLファイル、またはストリーム
  • Excel 形式ファイル(ワークブック全体または特定のシート)
  • ASCIIテキストファイル(ファイル全体またはセル範囲)

 それぞれ、FpSpreadクラスのメソッドを利用して保存しますが、今回はExcelのブックと互換性のある形式で保存することにします。

 これには、SaveExcelメソッドを使用します。引数は2つで、保存するファイル名と保存する際にデータと共にヘッダを保存するかどうかを、IncludeHeaders列挙型のメンバで指定します。

IncludeHeaders列挙型のメンバ
メンバ 説明
None 列ヘッダも行ヘッダも含めません。
ColumnHeadersCustomOnly 列ヘッダのカスタムヘッダのみを含めます。
RowHeadersCustomOnly 行ヘッダのカスタムヘッダのみを含めます。
BothCustomOnly 列ヘッダと行ヘッダのカスタムヘッダのみを含めます。
保存したデータファイルをExcelで開くと...
保存したデータファイルをExcelで開くと...

シートをもう1枚追加する処理

 では、同じシートをもう1枚追加する処理を、今度はコードから行ってみます。シートの作成は、SheetViewオブジェクトを作成してSheetViewCollectionコレクションに追加する、という手順で行います。

 コレクションに追加する前にシートの設定を行います。以降、デザイナで行った内容をコードから行ってみます。

  1. シートの作成
  2. シート名と行列数の設定
  3. 行列見出しの変更
  4. スキンの設定
  5. SUM関数の組み込み
  6. セルのコピー&ペースト

シートの作成

 新しいシートは、SheetViewクラスのコンストラクタで作成します。引数はありませんが、コンストラクタが返すインスタンスへの参照を変数で受け取っておきます。

Dim newsheet As New FarPoint.Win.Spread.SheetView()

 後は、この変数名で各種設定を変更します。

シート名と行列数の設定

 シート名はSheetNameプロパティで、行列数はそれぞれRowCountColumnCountプロパティの値で指定します。

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と同じシートが追加されていきます。

まとめ

 簡単な機能ですが、独自の表計算機能を自作のプログラムに実装してみました。まだまだ、いろいろな機能をたくさん持っているコンポーネントなので、次回以降、さまざまな機能拡張を紹介していきたいと思います。


 

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(SPREAD)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1034 2016/09/02 13:42

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング