勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PhpSpreadsheetでExcelファイルを読み込みPHPの配列として取り扱う方法

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

 

参考サイト

https://vbnettips.blog.shinobi.jp/php/php%20phpspreadsheet%20%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4_224

 - PHP

  関連記事

PhpSpreadsheetでセル内の文字列の改行、セル幅の自動調整を行う方法

以前PHPとPhpSpreadsheetを用いてExcelシートを出力する方法を ...

PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法

PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...

PHPでExcelシートを出力する方法(PhpSpreadsheet)

PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在 ...

PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法

以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...