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