スポンサードリンク

CakePHP
CakePHP

データを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対応のものをいつか作ってほしいですね。

(参考)
PHPでxls(Excel)ファイルに書き込む

スポンサードリンク