fulephpでエクセルファイルを読み込むサンプル

やる必要があったのでメモ

https://github.com/muhittin/fuelphp_excel
まずこちらからライブラリをダウンロード

fuel/packages/
excelというディレクトリをつくってアップロード。僕の場合のディレクトリ構成は以下

fuel/packages/excel/PHPExcel.php
fuel/packages/excel/bootstrap.php
fuel/packages/excel/PHPExcel/


実際に使って以下の様なエクセルファイルを読み込んでみる

>sample.xls

id 名前 点数
1 山田太郎 90
2 山田花子 50
$input_path = 'エクセルファイルへのパス';
//ライブラリ読み込み
Package::load('excel');
$excel = PHPExcel_IOFactory::load($input_path);
$sheet = $excel->getActiveSheet();

foreach ($sheet->getRowIterator() as $row) {
  foreach ($row->getCellIterator() as $cell) {
    echo $cell." ";
  }
  echo "<br>";
}

実行すると以下の様になります。簡単でした
id 名前 点数
1 山田太郎 90
2 山田花子 50

ついでに他でも使え回せるように以下のような処理を作ってみました。

$input_path = 'エクセルファイルへのパス';

$colums = array('id','名前','点数');

//ライブラリ読み込み
Package::load('excel');
$excel = PHPExcel_IOFactory::load($input_path);
$sheet = $excel->getActiveSheet();

//初期化用の配列                             
$format = array();
foreach (array_keys($colums) as $v) {
    $format[$v] = '';
}
//1行目ヘッダー                                           
$xls2arr = array();
foreach ($sheet->getRowIterator() as $row) {
    if ($row->getRowIndex() <2) {
        foreach ($row->getCellIterator() as $k => $cell) {
            $k2 = array_search($cell->getValue(),$colums);
            if (false !== $k2) {
                $xls2arr[$k] = $k2;
            }
        }
        break;
    }
}
//2行目~データ                                              
$result = array();
foreach ($sheet->getRowIterator() as $row) {
    if (1 < $row->getRowIndex()) {
        $line = $format;
        $empty = true;
        foreach ($row->getCellIterator() as $k => $cell) {
            if (isset($xls2arr[$k])) {
                $line[$xls2arr[$k]] = $cell->getValue();
                if ('' != $cell->getValue()) {
                    $empty = false;
                }
            }
        }
        if (!$empty) {
            $result[] = $line;
        } else {
            break;
        }
    }
}

//出力
print_r($result);

で、
array(
0 => array('id'=>'1','名前'=>'山田太郎','点数' => '90'),
1 => array('id'=>'2','名前'=>'山田花子','点数' => '50'),
);

となります。関数化しておくと何気に使いやすいかもしれませんね