PHPExcel は、PHP で Excel のファイルを読み書きできる非常に便利なライブラリです。
もちろん、Yii-framework と一緒に使うことも出来ます。
ただし、PHPExcel のようにそれ自身がオートローダを持っているライブラリを Yii で使うときには、ちょっとした注意が必要です。
<?php
// Yii のオートローダを一旦登録解除する
spl_autoload_unregister(array('YiiBase', 'autoload'));
// PHPExcel のオートローダを登録する ... PHPExcel.php の中でやっている
$phpExcelPath = Yii::getPathOfAlias('ext.phpexcel');
include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
// Yii のオートローダを改めて登録する
spl_autoload_register(array('YiiBase', 'autoload'));
...
// Yii のオートローダが働く
$models = SomeModel::model()->findAll();
...
// PHPExcel のオートローダも働く
$objReader = PHPExcel_IOFactory::createReader('Excel5');
...
上記のようにすることで、Yii のオートローダと PHPExcel のオートローダの両方をお互いに干渉することなく動作させることが出来ます。PHPExcel のコードは一行もいじる必要はありません。
キモは、オートローダの登録の順序です。
Yii のオートローダは、ロードすべきファイルが見つからないと例外を投げます。と言うことは、後から登録された別のオートローダは、何もするチャンスを与えられない、という事になります。一方、PHPExcel のオートローダは、ファイルが見つからなかった場合には false を返して、後に続く別のオートローダに席を譲ります。
この点は、滅多にない Yii における設計の失敗、と言ってよいかもしれません。ともかく、順序を変えてやれば無問題、という次第です。
PHPExcel をラップした Yii のためのエクステンションも存在しますが、オートローダの処理を間違ってコケる事があるようです。素の PHPExcel をお奨めします。
あ、PHPExcel の解説だと思った人、ごめんなさい。
なお、また、上記は Yii 1.1.x のための記事です。 Yii 2.0 では、オートローダの問題は無くなりました。