佐竹那月(さたけ なつき)

 プログラマ,インストラクタを経てテクニカル・ライターに。インストラクタ時代に浅く広く様々な言語に接し,今はDelphi一筋。趣味は歌舞伎座通い。仁左様~。

 今回は,ほかのプログラムの機能を使うためのCOMオブジェクトを利用して,Microsoft Excelにアクセスするプログラムを作ってみましょう。COMについては,後ほど説明します。

Excelにデータをコピーする「Excelへコピーしよう!」

 今回作成するサンプル・プログラムは,StringGridに入力した数値をMicrosoft Excel(以下Excel)のワークシートにコピーする「Excelへコピーしよう!」です。以下のような四つの機能を備えています。

  1. 任意のExcelワークブックを開く
  2. 新規でExcelワークブックを作成する
  3. StringGridコンポーネントに記述した数値をExcelワークシートにコピーする
  4. Excelだけを終了する

 今回のプログラムはExcelがインストールされているパソコンで試してみてください。データのコピーは,Excelのアクティブシート(手前に表示されているワークシート)に実行します。既存のデータがある場合は上書きしてしまいますので注意してください。なお,コピーするのは数値のデータだけです。文字列は0に変換します。

 ではさっそく,プログラムを作っていきましょう。手順は覚えていただけましたか? まず画面を作り,次にコードを書くのでしたね。先に画面を完成させることがポイントです。

 まずTurbo Delphiを起動します。デスクトップにTurbo Delphiのアイコンがあれば,それをダブルクリックします。なければWindowsのスタートメニューから「すべてのプログラム」-「Borland Developer Studio 2006」-「Turbo Delphi」の順に選択します。

 Turbo Delphiの画面が表示されたら,「画面を作る」からはじめます。起動してすぐの状態では画面中央に「ホームページ」が表示されています。画面の右下にある「ツールパレット」のカテゴリから「Delphiプロジェクト」を探して,「+」ボタンで展開しましょう。すると,プログラムの種類を一覧表示します。その中から「VCLフォームアプリケーション」をダブルクリックします。

最初に画面を作る

 「Excelへコピーしよう!」の画面は,右と左の二つの部分に分かれています。右側にボタンを並べて機能を実装します。左側は,TStringGridコンポーネントを置いてユーザーの入力を受け付けます。

 今回利用するコンポーネントは以下の通りです。

  • コンポーネント配置の土台になる「TPanel」コンポーネント
  • 入力を受け付ける「TStrigGrid」コンポーネント
  • Excelとのやり取りをするための「TExcelApplication」「TExcelWorkbook」「TExcelWorksheet」
  • TPanelの上に置く「TButton」コンポーネント(五つ)

 これらのコンポーネントは画面右下にある「ツールパレット」から選びます。TPanelとTButtonは「Standard」カテゴリに,TStringGridは「Additional」カテゴリに,TExcelApplication,TExcelWorkbook,TExcelWorksheetは「Servers」カテゴリにそれぞれあります。

 すぐに見つからない場合は,「ツールパレット」と書かれた部分をクリックして,キーボードで,コンポーネントの始めの2文字程度を続けて入力してください。すると,その二文字で始まるコンポーネントだけが表示されます。解除する(元の状態に戻す)には,ツールパレット上部にある「ろうと」のようなアイコンが付いたボタンをクリックします。

 では,TPanelとTStrigGridコンポーネントを配置しましょう。ツールパレットから「TPanel」を選択して,フォームの右側に配置します。次に,フォームのツールパレットから「TStringGrid」を選択し,そのままフォームの左側をクリックします。

 配置すると,コンポーネントの種類名に連番が付いた名前になります。この説明の中では「Panel1」「StringGrid1」など1から順に呼びますが,実際の作業では「Panel2」や,「StringGrid3」となることもありますので,読み替えて作業を進めてください。

 これから載せていくコンポーネントを置きやすくするために,プロパティの一部を先に設定しておきます。プロパティは画面左下のオブジェクトインスペクタにある「プロパティ」ページで設定します。

 ここで設定するのは「Align」プロパティです。Panel1を選択して,「レイアウト」か「表示」カテゴリにある「Align」を探します。右にある設定欄で「alRight」を選択します。これでPanel1がフォームの右側にピタッとくっつきます。次に,StringGrid1を選択して「Align」プロパティで「alClient」を選択します。StringGrid1が,フォームの残りの部分いっぱいに広がります(図1)。

図1●TPanelとTStrigGridコンポーネントを配置し,プロパティを設定した後の様子
図1●TPanelとTStrigGridコンポーネントを配置し,プロパティを設定した後の様子

 ついでにPanel1の「Caption」プロパティの内容も削除しておきましょう。Panel1を選択して「表示」カテゴリなどにある「Caption」プロパティを選択して,中に記述されている文字を削除します。これらの設定を一度まとめておきます。

コンポーネント名 カテゴリ名 プロパティ名 設定する値,または操作
Panel1 レイアウト Align alRight
Panel1 表示 Caption 内容を削除します
StringGrid1 レイアウト Align alClient

 このままでは小さくて操作しづらいので,フォームやコンポーネントを広げます。パネルはボタンを縦一列に配置するのでボタンが置ける幅にしてください。

 サイズを調整したらTButtonコンポーネントを五つ配置します。ツールパレットから「TButton」を選択して,Panel1の上に縦に五つ並べます。次に,Excel関係のコンポーネント「TExcelApplication」「TExcelWorkbook」「TExcelWorkSheet」を配置します。ツールパレットから選択して,適当な場所に配置します。これらはすべて非ビジュアルコンポーネントなので,実行するときには見えません。どこに配置してもいいのですが,操作しやすい場所に置きましょう。

 続いて,プロパティを表1のように設定します。コンポーネントを選択しにくい場合は,画面左上の構造ペインからコンポーネント名をクリックすると便利です。ボタンのプロパティは名前にかかわらず,上から順に設定します。

表1●プロパティ設定の一覧
コンポーネント名 カテゴリ名 プロパティ名 設定する値,または操作
Form1 その他 Name 「frmExMain」
Form1 表示 Caption 「Excelへコピー」
StringGrid1 その他 Name 「strgData」
StringGrid1 その他 Options goDrawFocusSelected
StringGrid1 その他 Options goEditing
StringGrid1 その他 RowCount 「20」
Button1 その他 Name 「btnNew」
Button1 表示 Caption 「新規Excel(&N)」
Button1 表示 Width 「90」
Button2 その他 Name 「btnCopy」
Button2 表示 Caption 「Excelへコピー(&C)」
Button2 表示 Width 「90」
Button3 その他 Name 「btnsCopy」
Button3 表示 Caption 「選択コピー(&S)」
Button3 表示 Width 「90」
Button4 その他 Name 「btnExcelExit」
Button4 表示 Caption 「Excel終了(&E)」
Button4 表示 Width 「90」
Button5 その他 Name 「btnExit」
Button5 表示 Caption 「終了(&X)」
Button5 表示 Width 「90」

 図2のようにコンポーネントを配置できたでしょうか。ここまでできたら,保存しておきましょう。保存はツールバーの「すべて保存」ボタンをクリックします。ユニットは「FormExcelCopy」,プロジェクトは「ExcelCopy」で保存します。

図2●コンポーネントの配置が終わった状態
図2●コンポーネントの配置が終わった状態