PHPでExcelを出力するのは業務システムではよくありそうだが、今回はExcelファイルのアップロードからの読込でシートからデータを取得するという要望があった。
なのでPhpSpreadsheetを使用してExcelからデータを取得する方法についてメモメモ。

PhpSpreadsheetオフィシャルドキュメント
https://phpspreadsheet.readthedocs.io/en/develop/

Github/
https://github.com/PHPOffice/PhpSpreadsheet

Packagist/
https://packagist.org/packages/phpoffice/phpspreadsheet

PHPの対応バージョン 5.6以上
必要なextension
php_zip
php_xml
php_gd2

2018年10月現在の最新バージョン
1.4.1

PhpSpreadsheetのインストール

これは、composerを使用してインストールを行う。

 require phpoffice/

サンプルコード

サンプルなのでファイルアップロードは省略。

// 読込だけならIOFactoryのみでOK
use PhpOffice\\IOFactory;

class Sample1 {

	public function readExcel()
    {
        $inputFileName = '/temp/sample.xlsx';
        $inputFileType = IOFactory::identify($inputFileName);
        $reader = IOFactory::createReader($inputFileType);
        
        $spreadsheet = $reader->load($inputFileName);
        
        // 第1引数はセルに値が無い場合にセットする値を指定する
        // 第2引数はセルに計算式が入っている場合、trueだと計算結果をfalseなら式をそのまま取得する
        // 第3引数はセルの書式に各種フォーマットなどが設定されている場合にtrueだとフォーマット済みの値を取得する。falseの場合はセルの入力値を取得する
        // 第4引数をfalseにすることで0から始まる数字をキーにした配列となる。trueの場合は、A1形式の値をキーにした配列となる
        $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
        print_a($sheetData,'label:excel読込結果');
        
    }
}

実行結果

今回のテストに使用したExcelデータ

toArray(null, true, true, true) パターン

toArray(null, false, true, true) パターン

toArray(null, true, false, true) パターン

toArray(null, true, true, false) パターン

取得結果は配列で取得した方が利用しやすいので「toArray」の第4引数は「false」がよさそうです。
フォーマット済みの結果で取得するかしないかはシートデータによりけりかな

カテゴリー: PHP

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です