PhpSpreadsheetでExcelファイルを読み込みPHPの配列として取り扱う方法
formからCSVファイルをアップロードし、PHPの配列に格納後、データベース登録等の何らかの処理を行うというケースは多いが、これをExcelファイルで同じことをしたかった。調べたところPhpSpreadsheetライブラリで対応できたので以下に実装方法をメモ。
目次
PhpSpreadsheet
公式サイト
https://phpspreadsheet.readthedocs.io/en/latest/
GitHub
https://github.com/PHPOffice/PhpSpreadsheet
ライブラリのインストール
サーバにSSH接続し、以下コマンドでインストールする。
composer require phpoffice/phpspreadsheet
今回使用するExcelファイル
以下内容のExcelファイルをアップロードしておく。
実装方法
ソースコード
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Worksheet; $file = 'test.xlsx'; $sheet = IOFactory::load($file); $objSheet = $sheet->getSheet(0); $strRange = $objSheet->calculateWorksheetDimension(); $data = $objSheet->rangeToArray($strRange); var_dump($data);
出力例
上記ソースコードを実行すると以下が出力された。
array(4) { [0]=> array(3) { [0]=> string(4) "name" [1]=> string(3) "age" [2]=> string(6) "regist" } [1]=> array(3) { [0]=> string(6) "田中" [1]=> string(2) "20" [2]=> string(13) "1/1/2025 1:00" } [2]=> array(3) { [0]=> string(6) "山田" [1]=> string(2) "30" [2]=> string(13) "2/2/2025 2:00" } [3]=> array(3) { [0]=> string(9) "佐々木" [1]=> string(2) "40" [2]=> string(13) "3/3/2025 3:00" } }
日付のフォーマット変更
日付部分が海外のフォーマットになっている点が気になる。PhpSpreadsheet側もしくはExcelシート側で何とかしようかとは思ったが、面倒だったので以下のようにPHP側で対応した。
$data_2 = array(); foreach( (array)$data as $key => $val ){ if( $key != 0 ){ $data_2[$key] = $val; $data_2[$key][2] = date('Y-m-d H:i:s', strtotime($data_2[$key][2])); } } var_dump($data_2);
出力例
上記ソースコードを実行すると以下が出力された。
array(3) { [1]=> array(3) { [0]=> string(6) "田中" [1]=> string(2) "20" [2]=> string(19) "2025-01-01 01:00:00" } [2]=> array(3) { [0]=> string(6) "山田" [1]=> string(2) "30" [2]=> string(19) "2025-02-02 02:00:00" } [3]=> array(3) { [0]=> string(9) "佐々木" [1]=> string(2) "40" [2]=> string(19) "2025-03-03 03:00:00" } }
参考サイト
関連記事
-
-
PhpSpreadsheetでセル内の文字列の改行、セル幅の自動調整を行う方法
以前PHPとPhpSpreadsheetを用いてExcelシートを出力する方法を ...
-
-
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...
-
-
PHPでExcelシートを出力する方法(PhpSpreadsheet)
PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在 ...
-
-
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...