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"
}
}
参考サイト
関連記事
-
-
PHPでExcelシートを出力する方法(PhpSpreadsheet)
PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在 ...
-
-
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...
-
-
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...
-
-
PhpSpreadsheetでセル内の文字列の改行、セル幅の自動調整を行う方法
以前PHPとPhpSpreadsheetを用いてExcelシートを出力する方法を ...
