大量にあるエクセルファイルからデータを抽出しなければならなくなって、

PHPExcelというライブラリを使ってデータを取り出してみた。

https://github.com/PHPOffice/PHPExcel


とりあえず最初は簡単にファイルのパスがわかっているところから

開発環境は

Ubuntu 17.04

PHP 7.1.5


準備として、XML、GDとArchive::Zipを入れる必要がある。

端末を開き、下記のコマンドを実行

sudo apt-get install php7.1-xml php7.1-gd php7.1-zip

PHP周りの必要なライブラリのインストール後に、下記のページからClassesディレクトリごとダウンロードする。

https://github.com/PHPOffice/PHPExcel


ClassesディレクトリをPHPのワークスペースに入れて準備は終わり。




最初にサンプルのファイルを下記のパスになるように配置してみる。

/home/saito/files/sample.xls

サンプルファイルのデータは


libre_calc_sample


こんな感じで適当に値を入れてみた。

ライブラリのファイルの配置とサンプルファイルの準備ができたところでコードを書いてみる。

というわけで書いてみたコードが下記になる。


<?php
$filepath = "/home/saito/File/sample.xls";

//Classesディレクトリを配置したパスを指定
$path = "Classes/";
require_once($path . "PHPExcel.php");
require_once($path . "PHPExcel/IOFactory.php");

//拡張子がxlsx対応 拡張子によって読み込みの仕方を変える
preg_match('/[^.]+$/', $filepath, $tmp);
$extension = $tmp[0];

//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>";
		}
	}
}

このコードを実行してみると、


libre_calc_sample1


こうなった。

セルの番号と値がとれれば要件は満たせる。