
データをExcelファイルでほしいと言われて
CSVで出力して加工してもらおうかと思いましたけど、
CSVの使い方など説明しても通じないと思うので
できれば、Excelで一発で出したい!
なので、いろいろ探したら2つ見つかりました。
・PHPExcel
・ExcelReviser
PHPExcelは遅いようなのでExcelReviserを採用しました。
理由は、ExcelReviserはテンプレートに値を入れるだけなので
処理が速いらしい。
簡単なものだからこっちにしました。
ファイルをダウンロードして設置
ファイルのダウンロードですが、
サイトでユーザー登録しないとダウンロードできません。
茶漬けフォーラム
上記のサイトで登録してファイルをダウンロードします。
最初「Reviser_lite_003beta」のライト版を使ってみたのですが
エラーがでてうまく使えなかったので断念・・・
情報が少なくてね~
なので「Excel_Reviser_023beta3」をダウンロードしました。
ファイルの設置
app/Vendorディレクトリに「excel」ディレクトリを作って
ダウンロードして解凍したフォルダの中にある「reviser.php」を入れます。
次にビューファイルで
App::import('Vendor','excel/reviser');
と書くだけです。
あと、忘れてはいけないのが
コントローラーでレイアウトをしないように指定します。
public function excel(){
//レイアウトを使用しない
$this->layout = '';
}
これを書かないと、excelにビューの内容がでてしまいます。
あとは、コントローラーからデータを取得して
ビューファイルに表示させるだけです。
ビューファイルの記述方法
データを取ってきたら表示をさせます。
ExcelReviserの表示のさせ方です。
// reviserのClassオブジェクトを新規に作成します。
$reviser = new Excel_Reviser;
// デフォルトはeucJP-winです。文字コードを変更してください。
$reviser->setInternalCharset('utf-8');
// 空白セルに文字を追加する例です
$reviser->addString(シート番号,行番号,列番号, セルの値); ※番号はすべて0から
// 空白セルに数値を追加する例です
$reviser->addNumber(シート番号,行番号,列番号, セルの値); ※番号はすべて0から
// テンプレートファイルパス
$uploadDir = realpath( TMP );
$uploadDir .= DS . 'excel' . DS;
// テンプレートファイル名の設定
$readfile = $uploadDir . 'template.xls'; // テンプレートファイルの指定
$outfile = 'test.xls'; // 出力するファイル名です
// 最後に書換えを実行します
$reviser->reviseFile($readfile, $outfile);
※ExcelReviserはテンプレートファイルを使うので
app/tmpディレクトリに「excel」ディレクトリを作り
そこに、templateファイルを設置してそのファイルを指定してます。(13~15行目)
その他はREADMEに載っているのでそちらを参照してください。
内部エラーが出たので対処法
さぁ、準備完了と思って出力したら内部エラーが出ました。
・・・さぁ、どうしたらいいのかと思っていたら
フォーラムに同じような事例がありました。
reviser.phpにてエラーが出るため、利用できません。
どうも、初期値が入っていないものがあるのでエラーが出るようです。
ビューファイルのimport文のすぐ下に
error_reporting(E_ALL ^ E_NOTICE);
上記を記述して無事Excelが出力されました。
これは簡単です。
後はサーバに上げてテストして終わりです。
テスト後の結果
サーバーに上げてテストしたら
なんと、エラーが出てしまいました。
調べてみたところ、サーバーのCPUが64bitだったため
ExcelReviserは使えないようです。
・・・残念です。
ローカルマシンが32bitだったので気づかなかったんですけど
フォーラムとかにも色々書いてありました。
仕方がなので、ここまでの設定は覚書として残しておいて
次はPHPExcelで設置してみたいと思います。
ExcelReviserの開発は終わっているようですが
64bit対応のものをいつか作ってほしいですね。
