phpでsylkファイルを読む
2007/05/25
なんか、PHPでエクセル読もうとしたけど、PHPExcelは、Excel2007対応のようでしたので、他を当たろうと思いました。
探したんですが、Excelを読みこむモジュールというのがなく、進路変更しました。
sylk形式のファイルを読んで動くWebアプリを作ることにしました。
sylk形式なら、excelで編集できるし、読むのも簡単そうだったので、良しとしました。
SylkReader
以下、必要最小限の機能しかないSylkファイル読み込みクラスです。
<?php class SylkReader { private $data; public function __construct($file_name) { $contents = file_get_contents($file_name); $lines = split("\n", $contents); for ($i = 0; $i < count($lines); $i++) { $columns = split(";", $lines[$i]); if (array_shift($columns) != "C") continue; $col = array_shift($columns); if (substr($col, 0, 1) == "Y") { $y = substr($col, 1); $col = array_shift($columns); } $x = substr($col, 1); $col_data = rtrim(substr(array_shift($columns), 1)); $this->data[$y - 1][$x - 1] = preg_replace("/^\"(.*)\"$/", "\\1", $col_data); } } public function get_data() { return $this->data; } } $reader = new SylkReader("sylk.slk"); print_r($reader->get_data()); ?>
↓のようなエクセルから出力したsylkファイルがあったとき、
ID | name |
---|---|
1 | jack |
2 | kate |
3 | boom |
4 | harry |
5 | john |
6 | ana |
7 | san |
↓のような2次元配列を返すようにしました。
Array ( [0] => Array ( [0] => ID [1] => name ) [1] => Array ( [0] => 1 [1] => jack ) [2] => Array ( [0] => 2 [1] => kate ) [3] => Array ( [0] => 3 [1] => boom ) [4] => Array ( [0] => 4 [1] => harry ) [5] => Array ( [0] => 5 [1] => john ) [6] => Array ( [0] => 6 [1] => ana ) [7] => Array ( [0] => 7 [1] => san ) )
まとめ
PHPって、作ってる時間のほとんどは関数調べてる時間だなorz.
追記:汎用的に使うにはいろいろとダメみたい。今後、id:smeghead:20070526:sylkで修正していきます。