前回、PHPExcelというライブラリを介してPHPでエクセルファイルを読み込んでみた。
読み込みはファイルのパスを直打ちで指定しての対応で、
これでは汎用性に欠けるということで
今回はファイルのアップロードにも対応できるように改変してみた。
先に改変したコードを載せると、
<?php
//ファイルがアップロードされた場合にエクセルファイルの読み込みを開始する
if(count($_FILES)){
//Classesディレクトリを配置したパスを指定
$path = "Classes/";
require_once($path . "PHPExcel.php");
require_once($path . "PHPExcel/IOFactory.php");
//ファイル名から拡張子を調べる仕様に変更
preg_match('/[^.]+$/', $_FILES["file"]["name"], $tmp);
$extension = $tmp[0];
$filepath = $_FILES["file"]["tmp_name"];
//xls
if($extension == "xls"){
$xls = PHPExcel_IOFactory::load($filepath);
//xlsx
}else{
$xls = PHPExcel_IOFactory::createReader('Excel2007')->load($filepath);
}
//ファイル内に複数のシートがある時対応
foreach ($xls->getSheetNames() as $i => $sheetName) {
//下記二行で$i番目のシートを開く
$xls->setActiveSheetIndex($i);
$sheet = $xls->getActiveSheet();
//各行を取得 $rには行番号が格納される
foreach ($sheet->getRowIterator() as $r => $row) {
//セルを取得 $cには列の記号(AとかB)が格納される
foreach ($row->getCellIterator() as $c => $cell) {
//セル内の値を出力
echo $c . $r . ":" . $cell->getCalculatedValue() . "<br>";
}
}
}
}
?>
<form enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="upload">
</form>
改修したところは、
ファイルのアップロードが実行されない限りファイルを読み込まないことと、
コードの末尾にHTMLでフォームの記述が追加されたことぐらい。
ファイルの拡張子とファイルのパスは$_FILESに格納された値を使用している。
このコードを実行してみると、

フォームが表示され、
昨日の記事で作成したxlsファイルを指定してアップロードしてみると、

先日の記事同様、どのセルに何の値があるかを表示できた。





