Delphi for PHPを使い倒す!

Delphi for PHPを使い倒す!(後編)

Delphi for PHPでExcel帳票を作ろう

はやしつとむ
アナハイムテクノロジー株式会社

2009/11/25

なぜPHPではビジュアル開発ができないのだろうか。そんな疑問を解消するのが、スペイン生まれのDelphi for PHPだ(編集部)

 前編の「えっ、まだPHPでVisual開発してないの?」では、Delphi for PHP 2.0を使ったお手軽Visual開発について、中編となる「データベースコンポーネントの使い方」はデータベースにアクセスするプログラムの作成について解説しました。

 このように簡単にデータベースアプリケーションが作れるとなると、今度は帳票が欲しくなりますね。

 というわけで、今回はDelphi for PHP 2.0からExcel帳票を出力してみたいと思います。

 また、VCL for PHPでオブジェクトの永続化を実現している、Serialize/UnSerializeについても触れたいと思います。

PHPExcelから帳票出力

 さて、Windows版Delphiと違って、Delphi for PHP 2.0には残念ながら帳票関連のコンポーネントがありません。しかし、PHPには便利なクラスライブラリがいくつもあります。今回は、PHPExcelを利用してみました。

 PHPExcelは、Excel2007/Excel2000形式のファイルを読み書きできる大変便利なクラスライブラリです。これだけでなく、以下に挙げるExcel以外のファイルフォーマットも扱えます。

出力に対応しているファイル形式

  • Excel 2007(spreadsheetML)
  • BIFF8(Excel 97以降)
  • PHPExcel Serialized Spreadsheet
  • CSV(Comma Separated Values)
  • HTML
  • PDF

読み取りに対応しているファイル形式

  • Excel 2007(spreadsheetML)
  • BIFF5(Excel 5.0/Excel 95)、BIFF8(Excel 97以降)
  • PHPExcel Serialized Spreadsheet
  • Excel 2003 XML format
  • Symbolic Link(SYLK)
  • CSV(Comma Separated Values)

 PHPExcelのインストールは、ソースコードのzipアーカイブをダウンロードして、PHPのインクルードパスに展開するだけです。Delphi for PHPのIDEからアプリケーションを起動する場合、インクルードパスは以下のようになっています。

●Delphi for PHP 2.0インストールパス\php\php.ini.template(509)
; Windows: "\path1;\path2"
include_path = ".;%VCLPATH%;%VCLPATH%vcl\PEAR;%VCLPATH%vcl\Zend\framework\library"

 %VCLPATH%は、<Delphi for PHP2.0インストールパス>に展開されるようなので、以下のようにライブラリを配置することになります。

<Delphi for PHP2.0インストールパス>
       |- \apache2
       |- ...
       |- \php
       |- \phpExcel
             |- \Classes
             |- \Documentation
             |- \Tests
       |- ...
       |- \vcl

 こうしておくと、以下のようにphpExcelのライブラリをインクルードすることで利用可能になります。

require_once("phpExcel/Classes/PHPExcel.php");
require_once("phpExcel/Classes/PHPExcel/IOFactory.php");

 サーバへの配置時には、/usr/local/lib/phpなどにPHPのライブラリが配置されるので、そこへphpExcel以下のファイル群を配置することになります。

コンポーネントの作成

 さて、せっかくですからPHPExcelをラッピングしたコンポーネントを作成してみましょう。コンポーネントの作成には、IDEのメニューから[コンポーネント]−[新規コンポーネント]を実行します。このダイアログはちょっとしたコツが必要なので、以下の手順を参考にして下さい。

画面1 コンポーネントの新規作成ダイアログ
コンポーネントの新規作成ダイアログ

 まず、継承元のコンポーネントがコンボボックスに表示されるのですが、コンポーネント作成上、ひんぱんに使われるであろうComponentやContorolといった基底クラスが表示されないし、CustomHogehogeといった中間的なクラス群も表示されません。

 ここは、Componentと手書きで入れてしまえばOKなので、気にせず入れてしまいます。クラス名には、PHPExcelSimpleReportという名前を付けました。DataSetを与えると、だーっと一覧表示するような帳票を出力させたいと思います。

 ダイアログの[パレットページ]と[パッケージの作成]チェックボックスは、「IDEのツールパレットのどこに登録されるか」を決定するパッケージを、作成するかどうかを決めるものです。

 初回であれば、何らかの名前を入れて作成しておいた方がいいでしょう。ここでは、Anaheim-Techとしました。これでOKボタンをクリックするとIDE上にunit1.inc.phpとunit1.package.phpという2つのファイルが生成されます。

 Delphi for PHP 2.0に最初から組み込まれているパッケージは、インストールディレクトリ\vcl\packagesに、いくつかのファイルに分かれて配置されています。今回作成したパッケージファイルもここに保存しましょう。unit1.package.phpは、ファイル名をanaheim-tech.package.phpとして保存しました。

 なお、unit1.inc.phpの方は、phpexcel.inc.phpとして、vclディレクトリに保存しました。

 これに伴って、パッケージファイルのregisterComponents()で指定しているファイル名も変更しておきます。パス名は特に付加しなくても問題ありません。また、パッケージファイルに、「Put the title of your package here」と書かれているところがあるので、ここにパッケージの説明を書いておきます。

 次に、コンポーネントファイルをいじります。dumpContents()メソッドは、ビジュアルコンポーネント用にHTMLやJavaScriptの出力を行うControls由来のメソッドであり、Componentには実装されていないうえ、今回作成する非ビジュアルコンポーネントには不要なので削除します。

 以下に、ここまでの手順を加えてスケルトンを示します。最後に、そもそもの継承元であるComponentが定義されているClasses.inc.phpを、忘れずにuse_unit()しておきます。

●phpexcel.inc.php
<?php
require_once("vcl/vcl.inc.php");
//Includes
use_unit("classes.inc.php");

//Class definition
class PHPExcelSimpleReport extends Component
{
   function __construct($aowner = null)
    {
        parent::__construct($aowner);
    }
}

?>
●anaheim-tech.package.php
<?php
  require_once("vcl/vcl.inc.php");
  use_unit("designide.inc.php");

    setPackageTitle("Anaheim Technology Components"); 
  //Change this setting to the path where the icons for the components reside
  setIconPath("./icons");

  //Change yourunit.inc.php to the php file which contains the component code
  registerComponents("Anaheim-Tech",array("PHPExcelSimpleReport"),"phpexcel.inc.php");
?>

 パッケージの保存ディレクトリの直下にあるiconディレクトリの中に、デフォルトのコンポーネント群で使用されている画像リソースがあります。クラス名と同じ名前の画像が自動的に使われます。

 今回は帳票なので、似たようなテイストのrichedit.bmpあたりをコピーして、phpexcelsimplereport.bmpとリネームします。とりあえずこれで登録してみましょう。もちろん空っぽなので、まだ何もできませんが。

 メニューから[コンポーネント]−[パッケージ]を実行して、[インストール済みのパッケージ]ダイアログを表示させます。ここで、追加ボタンをクリックするとpackagesディレクトリが表示されるので、先ほど保存したanaheim-tech.package.phpを選択します。

画面2 インストール済みのパッケージダイアログ
インストール済みのパッケージダイアログ

 リストボックスに「Anaheim Technology Components」が表示されているので、それを選択してから、コンポーネントボタンをクリックすると、コンポーネントダイアログにインストール済みのコンポーネントとしてPHPExcelSimpleReportがアイコン付きで表示されます。

画面3 コンポーネントダイアログ
コンポーネントダイアログ
 
1/4
next

Index
Delphi for PHPでExcel帳票を作ろう
Page1
PHPExcelから帳票出力
コンポーネントの作成
  Page2
PHPExcelをコンポーネントに組み込む
  Page3
PublicプロパティとPublishedプロパティ
オブジェクトのシリアライズとアンシリアライズ
  Page4
PHPExcel使用時の注意点

index Delphi for PHPを使い倒す!

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間