前回、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ファイルを指定してアップロードしてみると、
先日の記事同様、どのセルに何の値があるかを表示できた。