はじめに

PHPOffice/PhpSpreadsheet を使って、エクセルファイルを操作する方法(読み込み系)を整理した。

TL;DR

  • composer require phpoffice/phpspreadsheet でインストール
  • load でファイル読み込み, getSheetByName でシート選択
  • getRowIterator & getColumnIteratorrangeToArray でデータ取得
この記事が参考になった方
ここここからチャージや購入してくれると嬉しいです(ブログ主へのプレゼントではなく、ご自身へのチャージ)
欲しいもの / Wish list

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. セットアップ
    2. 使い方
      1. エクセル読み込み
      2. シートの取得
      3. 最終 行/列 の情報を取得
      4. データ範囲の読み込み
  5. まとめ
  6. その他・メモ
    1. ソート/フィルタ
    2. よくある操作(Recipes)
  7. 参考文献

環境・条件

1
2
3
4
5
6
$ php -v
PHP 7.3.16-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 20 2020 13:51:21) ( NTS )

$ composer info phpoffice/phpspreadsheet
name : phpoffice/phpspreadsheet
versions : * 1.11.0

詳細

以下のサイトを参考にした。

セットアップ

composer require でインストール

1
$ composer require phpoffice/phpspreadsheet

使い方

エクセル読み込み

参考: Reading Files

Xlsx のインスタンスを生成して、load で読み込み。

1
2
3
4
5
6
7
8
<?php

use PhpOffice\PhpSpreadsheet\Reader\Xlsx;

$file_path = '/path/to/excel.xlsx';

$reader = new Xlsx();
$xlsx = $reader->load($file_path);

シートの取得

参考: Worksheets

getSheetByName でシートの取得。

1
2
$sheet_name = 'Sheet1';
$sheet = $xlsx->getSheetByName($sheet_name);

最終 行/列 の情報を取得

参考: Looping through cells - Accessing cells

getHighestRow, getHighestColumn, getHighestDataRow, getHighestDataColumn, getHighestRowAndColumn で、最終行や最終列の情報を取得できる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$sheet->getHighestRow();
// => 269

$sheet->getHighestColumn();
// => 'P'

$sheet->getHighestDataRow();
// => 269

$sheet->getHighestDataColumn();
// => 'P'

$sheet->getHighestRowAndColumn();
// => array(2) {
// ["row"]=>
// int(269)
// ["column"]=>
// string(1) "P"
// }

データ範囲の読み込み

イテレータ

参考: Looping through cells - Accessing cells

getRowIterator, getColumnIterator を使ってループ処理させることができる。
※ちゃんと有効なデータ範囲内までで処理が終了する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
foreach ($sheet->getRowIterator() as $row) {
echo 'row' . $row->getRowIndex() . "\n";
foreach ($sheet->getColumnIterator() as $column) {
echo 'col' . $column->getColumnIndex() . "\n";
}
}
// => row1
// colA
// colB
// ...
// row2
// colA
// colB
// ...
Array で取得

参考: Retrieving a range of cell values to an array - Accessing cells

rangeToArray で指定範囲のデータを Array で取得可能。

1
$data = $sheet->rangeToArray("A1:C3");

最終 行/列 の情報を取得 と組み合わせると便利。

1
2
3
$last_row = $sheet->getHighestDataRow();
$last_col = $sheet->getHighestDataColumn();
$data = $sheet->rangeToArray("A1:{$last_col}{$last_row}");

まとめ

  • composer require phpoffice/phpspreadsheet でインストール
  • load でファイル読み込み, getSheetByName でシート選択
  • getRowIterator & getColumnIteratorrangeToArray でデータ取得

その他・メモ

ソート/フィルタ

AutoFilter Sorting に書かれているが、オートフィルタでのソートには未対応。

In MS Excel, Autofiltering also allows the rows to be sorted. This feature is not supported by PhpSpreadsheet.
MS Excelでは、オートフィルタリングにより行をソートすることもできます。この機能はPhpSpreadsheetではサポートされていません。

よくある操作(Recipes)

Recipes に色々とまとまっているので、参考になりそう。

参考文献

関連記事

この記事が参考になった方
ここここからチャージや購入してくれると嬉しいです(ブログ主へのプレゼントではなく、ご自身へのチャージ)
欲しいもの / Wish list