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を利用してみました。
http://www.codeplex.com/PHPExcel
PHPExcelは、Excel2007/Excel2000形式のファイルを読み書きできる大変便利なクラスライブラリです。これだけでなく、以下に挙げるExcel以外のファイルフォーマットも扱えます。
出力に対応しているファイル形式
- Excel 2007(spreadsheetML)
- BIFF8(Excel 97以降)
- PHPExcel Serialized Spreadsheet
- CSV(Comma Separated Values)
- HTML
読み取りに対応しているファイル形式
- 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からアプリケーションを起動する場合、インクルードパスは以下のようになっています。
; 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/IOFactory.php");
サーバへの配置時には、/usr/local/lib/phpなどにPHPのライブラリが配置されるので、そこへphpExcel以下のファイル群を配置することになります。
コンポーネントの作成
さて、せっかくですからPHPExcelをラッピングしたコンポーネントを作成してみましょう。コンポーネントの作成には、IDEのメニューから[コンポーネント]−[新規コンポーネント]を実行します。このダイアログはちょっとしたコツが必要なので、以下の手順を参考にして下さい。
まず、継承元のコンポーネントがコンボボックスに表示されるのですが、コンポーネント作成上、ひんぱんに使われるであろう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()しておきます。
<?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); } } ?>
<?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を選択します。
リストボックスに「Anaheim Technology Components」が表示されているので、それを選択してから、コンポーネントボタンをクリックすると、コンポーネントダイアログにインストール済みのコンポーネントとしてPHPExcelSimpleReportがアイコン付きで表示されます。
1/4 |
Index | |
Delphi for PHPでExcel帳票を作ろう | |
Page1 PHPExcelから帳票出力 コンポーネントの作成 |
|
Page2 PHPExcelをコンポーネントに組み込む |
|
Page3 PublicプロパティとPublishedプロパティ オブジェクトのシリアライズとアンシリアライズ |
|
Page4 PHPExcel使用時の注意点 |
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の世界を体験してみよう |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|