先日「マラソンの順位表をネットに公開してほしい」という依頼を受けた。
預かったエクセルは1000行以上あり、シートの数は20枚にも及ぶ。
予算もあまりなく、一気に片付けたいというご依頼だった。
一行、一セルづつコピペなんて絶対にあり得ない。
そんな時はPHP出番だ。
SEOとか気にしなくて良いという前提でPHPで組ませていただくことにした。
PHPとSEOは相性が悪いがそれはまた別な機会に。
エクセルをCSV形式でサーバに置いておき、PHPがそれを読み込み表示すると言ったプログラムだ。
以下順に説明する。
まずテーブル組というのは以下のような感じでソースが出来上がる。
-----------------------------------
-----------------------------------
この規則性のある部分を以下のようにCSVの行数分だけループさせるというやり方だ。
-----------------------------------
-----------------------------------
CSVは以下のような形になる。
-----------------------------------
-----------------------------------
カンマ(,)で区切られていることに注目していただきたい。
これがCSV形式と呼ばれるファイルの形だ。カンマ(,)がPHPで制御される符号となるのだ。
エクセルをCSV形式で保存するやり方は別サイトをご参照ください。
また、エクセルの本文内にカンマ(,)が入ってしまっている場合はそこが区切りの箇所になってしまうので、他のタイプに変更するしかない。
私の場合は念のために最初にカンマ(,)を全文検索し、ヒットしたものを別なタイプに置換している。
「,」を「・」などに一括置換する。
出来上がったCSVの文字コードにも注意していただきたい。
ホームページがUTF-8のエンコードならその文字コードと改行で保存し直していただきたい。
こんな感じ(ちなみに私はミミカキエデットを愛用しています。)
-----------------------------------
-----------------------------------
出来上がったCSVをサーバの任意のフォルダに置く。
そして、表示するPHPは以下のようなソースとして出来上がる。
-----------------------------------
-----------------------------------
表示されるページは以下な感じ。
-----------------------------------
-----------------------------------
列が増えるだけ、
<td><? echo $str[配列の数字]; ?></td>
も増えることを忘れずに。
出来上がったサンプルはこちら
このPHPのサンプルダウンロードはこちら!
PHPのソースコードは以下な感じ。
↓
--------------------------------------
<?
$fileName = "time.csv";
$file = fopen($fileName,"r");
?>
<table border="1">
<tr>
<td>順位</td>
<td>ゼッケンナンバー</td>
<td>タイム</td>
</tr>
<?
while(!feof($file)){
$csv = fgets($file);
$str = explode(",", $csv);
?>
<tr>
<td><? echo $str[0]; ?></td>
<td><? echo $str[1]; ?></td>
<td><? echo $str[2]; ?></td>
</tr>
<?
}
fclose($file);
?>
</table>
--------------------------------------