CakePHPクッキング

PHPExcelの導入

開発環境:CakePHP2.5.1

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマットがあるExcelに対してデータを表示させたりするには、PHPでExcelを簡単に扱うことができるPHPExcelが便利です。
そのPHPExcelの使い方を見ていきましょう。

PHPExcelの準備

まずはPHPExcelをダウンロードします。
http://phpexcel.codeplex.com/
(バージョンは1.8.0)

ダウンロードしたファイルを解凍し、Classesフォルダをphpexcelにリネームします。
そして、phpexcelフォルダをapp/Vendor/以下に設置します。

読み込み用のExcelを準備

読み込むExcelファイルを設置します。
場所は呼び出す時のパスを変更すればどこでもいいのですが、今回はapp/tmp/以下にphpexcelフォルダを作成し、その中にtemplate.xlsを配置します。

Controllerの設定

ここまでで下準備は完了ですので、ここからコードを書いていきます。

まずは、コントローラー側の設定になります。

excelアクションを呼び出すとExcelファイルがダウンロードできる仕組みにします。

<?php
public function excel() {
    $this->layout = '';

    $data = $this->Post->findById(1);
    $this->set('data', $data);
}

Viewの設定

続いてビュー側です。
こちらで最初に設置したPHPExcelを呼び出します。

<?php
App::import('Vendor', 'PHPExcel_Writer_IWriter', array('file' => 'phpexcel/PHPExcel/Writer/IWriter.php'));
App::import('Vendor', 'PHPExcel_Writer_Abstract', array('file' => 'phpexcel/PHPExcel/Writer/Abstract.php'));
App::import('Vendor', 'PHPExcel_Writer_Excel5', array('file' => 'phpexcel/PHPExcel/Writer/Excel5.php'));
App::import('Vendor', 'PHPExcel_Reader_Excel5', array('file' => 'phpexcel/PHPExcel/Reader/Excel5.php'));

$objReader = PHPExcel_IOFactory::createReader("Excel5");

// テンプレートのExcelの読み込み
$template = TMP . 'phpexcel/';
$template_path = $template . 'template.xls';
$PHPExcel = $objReader->load($template_path);

// シートの指定 一番左のシートから0、1、2・・・
$PHPExcel->setActiveSheetIndex(0);
$sheet = $PHPExcel->getActiveSheet();

// データ表示
//$sheet->setCellValue('セル番号', 'データ');
$sheet->setCellValue('A1', $data['Post']['id']);

// 保存ファイル名
$filename = 'output.xls';

Configure::write('debug', 0);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$objWriter = new PHPExcel_Writer_Excel5($PHPExcel);
$objWriter->save('php://output');
 

これでexcelアクションが呼ばれた時にダウンロードダイアログが表示されるようになります。

WordPressとCakePHPの共存

サイトを作るのに便利なWordPress。プラグインも数多く用意されて

サイトマップの作成方法

Googleのウェブマスターツールに渡すためのサイトマップの作成方法で

INSERTしたIDを取得する

データを保存した後にINSERTされたデータのIDを使って何かの処理を

ファイルの存在確認やフォルダー内のファイル一覧取得

特定のファイルの存在を確認したい場合や特定のフォルダー内にあるファイル

リンクの最後に常にスラッシュをつける方法

URLの最後に常にスラッシュをつけるかつけないかを統一する方法は、UR

countやsumを使う時のフィールド名を指定する

CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必

Formの便利な使い方

問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になる

ヘルパーをオーバーライドする

CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだ

特定の時だけSQLの条件を追加するならSet::mergeを使う

SQLの条件を追加したい時に使うのがarray_mergeなどですが、

ページネーションではDISTINCTではなく、GROUP BYを使う

重複したデータを省く時に使うDISTINCTですが、ページ送りで使う時

Model内で別のModelを呼び出す

モデル内で別のモデルを使いたいケースがあった場合、次のようにすることで

CakePHPでGoogleAnalyticsAPIを使う

CakePHPでGoogleAnalyticsを使う方法について見てい

独自のfindを定義するfindMethods

findをより便利に、よりスッキリ書くのに、findMethodsを使

TCPDFを使ってCakePHPでPDFを作成

CakePHPでPDFを作成するには幾つかの方法がありますが、今回はT

JavaScriptをコードの最下部に配置

SEOの観点からJavaScriptのコードは一番下に記述したいところ

無限スクロールをさせる

TwitterやFacebookのタイムラインを見ていて、ページの下に

PHPExcelの導入

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマ

Warning: SplFileInfo::openFile〜の警告が表示されたら

ShellとWEBの両方で同一のModelを呼び出す時に「Warnin

連結されていないデータを抽出

通常、テーブルを連結してデータを取得するには、アソシエーションを利用し

データを取得する

データを取得したい時に少し変わった条件で取得したい場合があります。

PAGE TOP ↑