phpでsylkファイルを読む

なんか、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で修正していきます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください