PHPでエクセルを読む Spreadsheet_Excel_Reader
2007/06/18
2011/02/17
以前のエントリ id:smeghead:20070525:phpexcel で、PHPからエクセルを読み込むのを諦めて、sylk形式のファイル読み込みにすることで逃げてたんですが、実は簡単でした。
http://green0.rdap.jp/index.html
id:f-ikesan さんに Spreadsheet_Excel_Reader というものを教えてもらって、Spreadsheet_Excel_Readerを試してみたら、何の問題なくExcelに記述された内容を取得できました。(今のところ)
ID | job |
---|---|
jack | doctor |
ana | police |
END_OF_DATA |
というエクセルがあった場合、
Array ( [0] => Array ( [ID] => jack [job] => doctor ) [1] => Array ( [ID] => ana [job] => police ) ) |
という形で取得するために以下のクラスを用意しました。
<?php /** * Excelファイルを読むクラス。 * 各カラムのデータをHashの配列に格納し返却する。 * * $reader = new ExcelReader("path/to/excel.xls"); * print_r $reader->get_data(); * 1行目のデータはカラム名として扱う。 * 2行目移行のデータをレコードとして扱います。 * 各レコードは、カラム名をキー、データを値としたHashに変換される。 * END_OF_DATAが表れたらレコードの読み込みを終了する。 */ class ExcelReader { protected $data; public function __construct($file_name_or_array) { if (is_array($file_name_or_array)) { $files = $file_name_or_array; } else { $files = array($file_name_or_array); } require_once 'Excel/reader.php'; $xls = new Spreadsheet_Excel_Reader(); $xls->setOutputEncoding('UTF-8'); foreach ($files as $file_name) { $xls->read($file_name); for ($i = 1; $i <= $xls->sheets[0]['numRows']; $i++) { for ($j = 1; $j <= $xls->sheets[0]['numCols']; $j++) { if (!isset($xls->sheets[0]['cells'][$i][$j])) continue; $col_data = $xls->sheets[0]['cells'][$i][$j]; if ($col_data == 'END_OF_DATA') break 2; if ($i == 1) { //1行目のレコードはカラム名として扱う。 $column_names[$j - 1] = $col_data; } else { $this->data[$i - 1][$column_names[$j - 1]] = $col_data; } } } } } public function get_data() { return $this->data; } public function find($id) { foreach ($this->data as $item) { if ($item["ID"] == $id) return $item; } return null; } } ?> |
追記20070619:クラスコメント間違ってました。
これで、Excelを読取専用データストレージとして動くWebアプリが作れます。
3件のピンバック
hyBLOG » Blog Archive » PHPでエクセルを読み込み配列に代入する方法。
PHPでエクセルを読み込み配列に代入する方法。 | why技術ブログ
PHPでエクセルを読み込み配列に代入する方法。 | hyBLOG