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