こんにちは、コバヤシです。
今回はとある案件でPHPでExcelファイルを扱う必要が出てきてたので「PhpSpreadsheet」を調査してまとめてみました。
PhpSpreadsheetとは
PHPでExcelを操作するライブラリです。Excelファイルの読み込み・作成が出来ます。
以前はPHPでExcelを扱うとしたら「PHPExcel」でしたが、すでに開発も終了し後継として「PhpSpreadsheet」が登場しました。
まずはインストール
Composerからインストールします
composer require phpoffice/phpspreadsheet
動作環境はPHP7.2以降となります。
Excelファイルを読み込んでみる
インストールが終わったら、まずは読み込んでみます。
<?php include('./vendor/autoload.php'); use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; $reader = new XlsxReader(); $spreadsheet = $reader->load('test.xlsx'); // ファイル名を指定 $sheet = $spreadsheet->getSheetByName('test'); // 読み込むシートを指定 $data = $sheet->rangeToArray('A1:E1'); // 配列で取得したい範囲を指定 var_dump($data);
単純に指定した範囲を配列として取得するだけなら、これだけで完了です。
とても簡単です!
シートの内容をすべて取得する
取得したい範囲が決まっていない場合は少しコードを書く必要があります。 例えば行数が決まっていないとかです。
<?php include('./vendor/autoload.php'); use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; $reader = new XlsxReader(); $spreadsheet = $reader->load('test.xlsx'); // ファイル名を指定 $sheet = $spreadsheet->getSheetByName('test'); // 読み込むシートを指定 foreach ($sheet->getRowIterator() as $row) { foreach($sheet->getColumnIterator() as $column) { echo $sheet->getCell($column->getColumnIndex() . $row->getRowIndex())->getValue().PHP_EOL; } }
getRowIterator()で使用している行のオブジェクト、getColumnIterator()で使用している列のオブジェクトが返ってきます。この2つを使ってぐるぐる回し値を取得します。
getColumnIndex()で「A」「B」などの列番号、getRowIndex()で「1」「2」などの行番号が取得できるので、2つを連結してgetCell()に渡してあげることでセルの情報が取得できます。
セルの値を取得する
値は以下の方法で取得できます。
<?php $sheet->getCell('A1')->getValue(); // 通常はこちら $sheet->getCell('A1')->getCalculatedValue(); // 計算式が入っている場合 $sheet->getCell('A1')->getFormattedValue(); // セルに設定された表示形式で取得したい場合
セルのスタイルを取得する
セルの背景色を取得する場合は以下のようにします。
<?php $sheet->getCell('A1')->getStyle()->getFill()->getStartColor()->getRGB();
取り消し線が設定されているか判断するには以下のようにするとbooleanが返ってきます。
<?php $sheet->getCell('A1')->getStyle()->getFont()->getStrikethrough();
セルのマージ情報を取得する
マージしているセルの範囲を取得。
<?php $sheet->getCell('A1')->getMergeRange();
マージしているセルかどうか。
<?php $sheet->getCell('A1')->isInMergeRange();
マージしているセルの実際に値が入っているセルかどうか。 A1とA2がマージされている場合、A1はtrueA2はfalseとなります。(A1に入っている値が表示されている)
<?php $sheet->getCell('A1')->isMergeRangeValueCell();
まとめ
まだまだ色々なメソッドが用意されています。
少し調べた限りですが、これなら必要な情報をExcelファイルから取得できそうですね。
APIは公式サイトに詳しく載っています。より詳しく知りたい方は以下サイトで調べてみてください。
次回はExcelファイルの作成について書きたいと思います。