PHPで簡単にExcelを操作可能にする「PhpSpreadsheet」の使い方のメモ
PHPでExcelファイルを簡単に扱える「PhpSpreadsheet」というライブラリの使い方を、メモとして残しておくことにしました。
PhpSpreadsheetについて
PhpSpreadsheetは、ExcelやスプレッドシートをPHP上で簡単に扱えるようにするためのPHPライブラリです。
PHPExcelの後継として開発されました。
特徴としては次のような内容があげられます。
- 無料
- xls、xlsx、CSV、PDFに対応
- データはもちろん、演算や装飾などにも対応
注意点
PhpSpreadsheetはデータ容量や処理の仕方によってメモリを多く消費します。
物理的なメモリやPHPの設定で増やしたり、処理中で解放するなど回避をする必要になる場合があります。
前提条件
- composerがインストールされている
- 2025年4月の時点での最新版ではPHP 8.1以上が必要(PHP 8.0は2.1.9、PHP 7.4は1.29.10、PHP 5.6は1.8.2で対応)
- ZipArchiveクラスが必要(PHPの設定でextension=zipを解放)
インストール
使用したいプロジェクトのディレクトリへ移動し、コマンドラインから次のコマンドを実行してインストールします。
composer require phpoffice/phpspreadsheet
composer.jsonファイルからインストールする場合は次のように記述し、composer install
コマンドを実行してインストールします。
{
"require": {
"phpoffice/phpspreadsheet": "*"
}
}
composer install
使い方
クラス(ライブラリ)の読み込み
最低限次のコードのようにベースとなるクラスを読み込みます。
require('vendor/autoload.php');
あとは名前空間が長いので短く扱うため、use
キーワードで必要に応じて各クラスを参照します。
// スプレッドシート作成などのクラス
use PhpOffice\PhpSpreadsheet\Spreadsheet;
// XLSを読み込む操作のクラス
use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader;
// XLSXを読み込む操作のクラス
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
// XLSXとして書き込む操作のクラス
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Writer;
// CSVを読み込む操作のクラス
use PhpOffice\PhpSpreadsheet\Reader\Csv as CsvReader;
// CSVとして書き込む操作のクラス
use PhpOffice\PhpSpreadsheet\Writer\Csv as CsvWriter;
// 日付を扱うためのクラス
use PhpOffice\PhpSpreadsheet\Shared\Date as Date;
// 数値の書式を扱うためのクラス
use PhpOffice\PhpSpreadsheet\Style\NumberFormat as NumberFormat;
// 水平・垂直揃えを扱うためのクラス
use PhpOffice\PhpSpreadsheet\Style\Alignment as Alignment;
// 罫線を扱うためのクラス
use PhpOffice\PhpSpreadsheet\Style\Border as Border;
// 塗り潰しを扱うためのクラス
use PhpOffice\PhpSpreadsheet\Style\Fill as Fill;
// 画像を扱うためのクラス
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
スプレッドシードの作成
Spreadsheet
クラスで新規にスプレッドシートを作成します。
require('vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
スプレッドシードの作成
Spreadsheet
クラスで新規にスプレッドシートを作成します。
require('vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
このクラスはインスタンスを作成すると、自動的に1つのワークシートが作られ、アクティブ状態になります。
ファイルの読み込み
名前空間のReaderで各形式にあわせたクラスでファイルを読み込むことができます。
例えばXLSXの場合は、Reader\Xlsx
クラスのload
メソッドでファイルを読み込みます。
require('vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
$reader = new Reader();
$spreadsheet = $reader->load('sample.xlsx');
戻り値はSpreadsheet
クラスのインスタンスを返します。
ファイルに保存
名前空間のWriterで各形式にあわせたクラスでファイルの書き出しをすることができます。
例えばXLSXの場合は、Writer\Xlsx
クラスのsave
メソッドでファイルへの書き込みを行います。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 保存先パス(ファイル名を含む) |
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Writer;
$writer = new Writer($spreadsheet);
$writer->save('../output/sample.xlsx');
ワークシートを参照
ワークシートを参照する方法は3通りあります。
1つ目はgetActiveSheet
メソッドで、現在のアクティブなワークシートを参照します。
$worksheet = $spreadsheet->getActiveSheet();
2つ目はgetSheetByName
メソッドで、シート名でワークシートを参照します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 参照したいシート名を指定します。 |
$worksheet = $spreadsheet->getSheetByName('Sheet1');
3つ目はgetSheet
メソッドで、インデックス番号でワークシートを参照します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 参照したいシート名を指定します。 |
$worksheet = $spreadsheet->getSheet(0);
ワークシートをアクティブにする
ワークシートをアクティブする方法は2通りあります。
1つ目はsetActiveSheetIndexByName
メソッドで、シート名でワークシートをアクティブにします。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | アクティブにしたいシート名を指定します。 |
$worksheet = $spreadsheet->setActiveSheetIndexByName('Sheet1');
2つ目はsetActiveSheetIndex
メソッドで、インデックス番号でワークシートをアクティブにします。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | アクティブにしたいシート名を指定します。 |
$worksheet = $spreadsheet->setActiveSheetIndex(0);
ワークシートを作成
createSheet
メソッドを使用することで、ワークシートを作成することができます。
戻り値は作成したワークシートを返します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 任意 | int | null | 作成する先(ワークシート)のインデックス番号。省略した場合は末尾に作成される。 |
// 末尾に作成
$worksheet = $spreadsheet->createSheet();
// 2つ目に作成
$worksheet = $spreadsheet->createSheet(1);
ワークシートを削除
createSheet
メソッドを使用することで、ワークシートを作成することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 削除するワークシートのインデックス番号。 |
$spreadsheet->removeSheetByIndex(0);
シート名の変更
setTitle
メソッドを使用することで、参照中のワークシートのシート名を変更することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 設定するシート名を指定します。 |
$spreadsheet->getActiveSheet()->setTitle('あいうえお');
セルを参照
getCell
メソッドを使用することで、セルを参照することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | array | 参照したいセル番号を指定します。「A3」という列のアルファベットと行番号を組み合わせた文字列か、[列番号, 行番号] のように配列で指定する方法があります。 |
$cell = $spreadsheet->getActiveSheet()->getCell('A3');
// 列番号(位置)、行番号(位置)の場合
$cell = $spreadsheet->getActiveSheet()->getCell([1, 3]);
列(カラム)を参照
getColumnDimension
メソッドを使用することで、列(カラム)を参照することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 参照したい列のアルファベットを指定します。 |
$col = $spreadsheet->getActiveSheet()->getColumnDimension('A');
列そのものであって、その列のセルを参照しているわけではないことに注意してください。
行を参照
getRowDimension
メソッドを使用することで、列(カラム)を参照することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 参照したい行番号(インデックス番号ではない)を指定します。 |
$row = $spreadsheet->getActiveSheet()->getRowDimension(1);
セルの値を取得
セルの値を取得する方法は3つほどあります。
1つ目はgetValue
メソッドを使用する方法です。
こちらは内部の値をそのまま取得します。
式が含まれる場合は式そのものの値、書式が適用されている場合は適用されていない値を返します。
$cell = $spreadsheet->getActiveSheet()->getCell('A3');
echo $cell->getValue();
2つ目はgetValueString
メソッドを使用する方法です。
基本的にはgetValue
メソッドと同じですが、数値などは文字列に変換されます。
$cell = $spreadsheet->getActiveSheet()->getCell('A3');
echo $cell->getValueString();
3つ目はgetFormattedValue
メソッドを使用する方法です。
式の結果や書式が適用された状態の値を返します。
$cell = $spreadsheet->getActiveSheet()->getCell('A3');
echo $cell->getFormattedValue();
セルに値を設定(代入)
セルに値を設定(代入)する方法は2つほどあります。
1つ目はsetCellValue
メソッドで、ワークシートを基準にセルを指定して値を設定(代入)します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | array | 設定(代入)の対象となるセルの列行番号を指定します。「A3」という列のアルファベットと行番号を組み合わせた文字列か、[列番号, 行番号] のように配列で指定する方法があります。 |
|
第二引数 | 必須 | mixed | 設定(代入)する値を指定します。 | |
第三引数 | 任意 | null | IValueBinder | null | 不明 |
$worksheet = $spreadsheet->getActiveSheet();
// 文字列
$worksheet->setCellValue('A1', 'Hello');
// 文字列(改行あり)
$worksheet->setCellValue('A1', "Hello\nWorld");
// 数値
$worksheet->setCellValue('A1', 123);
// 数式
$worksheet->setCellValue('A1', '=1+2+3');
// 日付(PhpOffice\PhpSpreadsheet\Shared\Date)
$worksheet->setCellValue('A1', Date::PHPToExcel(gmmktime(0, 0, 0, 12, 31, 2008)));
2つ目はsetValue
メソッドで、参照されたセルに対して値を設定(代入)します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | mixed | 設定(代入)する値を指定します。 | |
第二引数 | 任意 | null | IValueBinder | null | 不明 |
$cell = $spreadsheet->getActiveSheet()->getCell('A3');
// 文字列
$cell->setValue('Hello');
// 文字列(改行あり)
$cell->setValue("Hello\nWorld");
// 数値
$cell->setValue(123);
// 数式
$cell->setValue('=1+2+3');
// 日付(PhpOffice\PhpSpreadsheet\Shared\Date)
$cell->setValue(Date::PHPToExcel(gmmktime(0, 0, 0, 12, 31, 2008)));
何れの方法も、式や日付なども設定(代入)することができます。
配列からセルに値を設定(代入)
fromArray
メソッドを使用することで、配列からセルに値を設定(代入)することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | array | 設定(代入)する値を二次元配列で指定します。 | |
第二引数 | 任意 | mixed | null | null判定とする値を設定します。 |
第三引数 | 任意 | string | 'A1' | 設定(代入)の基準となるセルの列行番号を指定します。 |
第四引数 | 任意 | bool | false | 設定(代入)する値がnullの判定を厳密にするかどうかを指定します。false は== 、true は=== として判定します。 |
$worksheet->fromArray([
['a', 'b', 'c'],
['d', 'e', 'f']
], null, 'A3');
列を挿入(追加)
insertNewColumnBefore
メソッドを使用することで、列を挿入(追加)することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 挿入を開始する列番号(アルファベット)を指定します。 | |
第二引数 | 任意 | int | 1 | 挿入する数を指定します。 |
$spreadsheet->getActiveSheet()->insertNewColumnBefore('B', 2); // B列を基準に2列挿入
行を挿入(追加)
insertNewRowBefore
メソッドを使用することで、行を挿入(追加)することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 挿入を開始する行番号を指定します。 | |
第二引数 | 任意 | int | 1 | 挿入する数を指定します。 |
$spreadsheet->getActiveSheet()->insertNewRowBefore(3, 2); // 3行目を基準に2列挿入
列を削除
removeColumn
メソッドを使用することで、列を削除することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 削除する列を指定します。 | |
第二引数 | 任意 | int | 1 | 第一引数から何個削除するかを指定します。 |
$spreadsheet->getActiveSheet()->removeColumn('B'); // B列を削除
行を削除
removeRow
メソッドを使用することで、を削除することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 削除する行を指定します。 | |
第二引数 | 任意 | int | 1 | 第一引数から何個削除するかを指定します。 |
$spreadsheet->getActiveSheet()->removeRow(2); // 2行目を削除
データが入っているセルの範囲を取得
calculateWorksheetDimension
メソッドを使用することで、データが入っているセルの範囲を取得することができます。
「A1:C4」といった感じの文字列で返します。
$range = $spreadsheet->getActiveSheet()->calculateWorksheetDimension();
セルの範囲から値を全て取得
rangeToArray
メソッドを使用することで、セルの範囲から値を全て取得することができます。
戻り値は二次元配列で返します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | セルの範囲を「A1:C4」といった感じの文字列で指定します。 | |
第二引数 | 任意 | mixed | null | null判定とする値を設定します。 |
第三引数 | 任意 | bool | true | 式など計算した結果を返すかどうかを指定します。false で式そのものを返すようになります。 |
第四引数 | 任意 | bool | true | 書式を適用した結果を返すかどうかを指定します。false で値そのものを返すようになります。 |
第五引数 | 任意 | bool | false | キーを列行の番号の入り方を指定します。true で二次元目のキーが「A」のようなアルファベットになります。 |
第六引数 | 任意 | bool | false | 非表示の列または行を除外するかどうかを指定します。 |
第七引数 | 任意 | bool | false | 不明 |
$data = $spreadsheet->getActiveSheet()->rangeToArray('A1:E5');
セルの結合・解除
getStyle
メソッドを使用することで、セルを結合することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 結合するセルの範囲を指定します。 |
$spreadsheet->getActiveSheet()->mergeCells('A1:D4');
またunmergeCells
メソッドを使用することで、結合を解除することができます。
$spreadsheet->getActiveSheet()->unmergeCells('A1:D4');
リンクのURLを設定・取得
getHyperlink()->setUrl
メソッドを使用することで、セルにリンクのURLを設定することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 設定するURLを指定します。 |
$spreadsheet->getActiveSheet()->getCell('A1')->getHyperlink()->setUrl('https://www.example.com/');
また、getHyperlink()->getUrl
メソッドを使用することで、セルに設定されているリンク先のURLを取得することができます。
$url = $spreadsheet->getActiveSheet()->getCell('A1')->getHyperlink()->getUrl();
セルのスタイルオブジェクトの取得
getStyle
メソッドを使用することで、あるセルのスタイルオブジェクトを取得することができます。
スタイルオブジェクトはスタイルに関する操作を行うためのオブジェクトです。
$style = $spreadsheet->getActiveSheet()->getStyle('A1');
// 範囲
$style = $spreadsheet->getActiveSheet()->getStyle('A1:E6');
なお、初期の全体のスタイルはgetDefaultStyle
メソッドでオブジェクトを取得することができます。
$defaultStyle = $spreadsheet->getActiveSheet()->getDefaultStyle();
セルの書式を設定
getNumberFormat()->setFormatCode
メソッドを使用することで、セルの書式を設定することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 設定する書式を指定します。 |
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
... 中略 ...
$style = $spreadsheet->getActiveSheet()->getStyle('A1');
// 文字列
$style->getNumberFormat()->setFormatCode('@');
// 数字の3桁区切り
$style->getNumberFormat()->setFormatCode('#,##0');
// 0.00%
$style->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_PERCENTAGE_00);
// 1970-01-01 01:23:45
$style->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATETIME);
// 1970-01-01
$style->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD);
// 1970/01/01
$style->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
// 01:23:45
$style->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_TIME5);
PhpOffice\PhpSpreadsheet\Style\NumberFormat
には、書式の定数が用意されています。
定数 | 書式 |
---|---|
FORMAT_TEXT | @ |
FORMAT_NUMBER | 0 |
FORMAT_NUMBER_0 | 0.0 |
FORMAT_NUMBER_00 | 0.00 |
FORMAT_NUMBER_COMMA_SEPARATED1 | #,##0.00 |
FORMAT_NUMBER_COMMA_SEPARATED2 | #,##0.00_- |
FORMAT_PERCENTAGE | 0% |
FORMAT_PERCENTAGE_0 | 0.0% |
FORMAT_PERCENTAGE_00 | 0.00% |
FORMAT_DATE_YYYYMMDD | yyyy-mm-dd |
FORMAT_DATE_DDMMYYYY | dd/mm/yyyy |
FORMAT_DATE_DMYSLASH | d/m/yy |
FORMAT_DATE_DMYMINUS | d-m-yy |
FORMAT_DATE_DMMINUS | d-m |
FORMAT_DATE_MYMINUS | m-yy |
FORMAT_DATE_XLSX14 | mm-dd-yy |
FORMAT_DATE_XLSX14_ACTUAL | m/d/yyyy |
FORMAT_DATE_XLSX15 | d-mmm-yy |
FORMAT_DATE_XLSX16 | d-mmm |
FORMAT_DATE_XLSX17 | mmm-yy |
FORMAT_DATE_XLSX22 | m/d/yy h:mm |
FORMAT_DATE_XLSX22_ACTUAL | m/d/yyyy h:mm |
FORMAT_DATE_DATETIME | d/m/yy h:mm |
FORMAT_DATE_TIME1 | h:mm AM/PM |
FORMAT_DATE_TIME2 | h:mm:ss AM/PM |
FORMAT_DATE_TIME3 | h:mm |
FORMAT_DATE_TIME4 | h:mm:ss |
FORMAT_DATE_TIME5 | mm:ss |
FORMAT_DATE_TIME6 | h:mm:ss |
FORMAT_DATE_TIME7 | i:s.S |
FORMAT_DATE_TIME8 | h:mm:ss;@ |
FORMAT_DATE_YYYYMMDDSLASH | yyyy/mm/dd;@ |
FORMAT_DATE_LONG_DATE | dddd, mmmm d, yyyy |
セルのフォントオブジェクトの取得
getFont
メソッドを使用することで、セルのフォントオブジェクトを取得することができます。
フォントオブジェクトはフォントに関する操作を行うためのオブジェクトです。
$font = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont();
文字の書体を設定(変更)・取得
setName
メソッドを使用することで、文字の書体を設定(変更)することができます。
$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setName('MS Pゴシック');
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 'Calibri' | 設定(変更)する書体名を指定します。 |
また、getName
メソッドを使用することで、設定中の書体名を取得することができます。
$fontName = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->getName();
文字の大きさを設定(変更)・取得
setSize
メソッドを使用することで、文字の大きさを設定(変更)することができます。
$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setSize(8);
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 設定(変更)する文字の大きさを指定します。 |
また、getSize
メソッドを使用することで、文字の大きさを取得することができます。
$size = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->getSize();
文字の太さを設定(変更)・取得
setBold
メソッドを使用することで、文字の太さを設定(変更)することができます。
$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | bool | 太くする場合はtrue、太くしない場合はfalseを指定します。 |
また、getBold
メソッドを使用することで、太さが与えられているかそうでないかを取得します。
$isBold = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->getBold();
文字のイタリック体を設定(変更)・取得
setItalic
メソッドを使用することで、文字のイタリック体を設定(変更)することができます。
$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setItalic(true);
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | bool | イタリック体にする場合はtrue、イタリック体にしない場合はfalseを指定します。 |
また、getItalic
メソッドを使用することで、イタリック体が与えられているかそうでないかを取得します。
$isBold = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->getItalic();
文字の下線を設定(変更)・取得
setUnderline
メソッドを使用することで、文字の下線を設定(変更)することができます。
$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setUnderline(true);
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | bool | 下線を付ける場合はtrue、下線を付けない場合はfalseを指定します。また定数で下線の種類を指定することもできます。 |
定数 | 説明 |
---|---|
Font::UNDERLINE_NONE | 下線を付けません。 |
Font::UNDERLINE_SINGLE | 下線を付けます。 |
Font::UNDERLINE_SINGLEACCOUNTING | セル幅いっぱいに下線を付けます。 |
Font::UNDERLINE_DOUBLE | 二重下線を付けます。 |
Font::UNDERLINE_DOUBLEACCOUNTING | セル幅いっぱいに二重下線を付けます。 |
また、getUnderline
メソッドを使用することで、下線が与えられているかそうでないかを取得します。
$underLine = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->getUnderline();
色を定義
PhpOffice\PhpSpreadsheet\Style\Color
クラスを使用することで、色を定義します。
new
キーワードでインスタンスを生成します。
use PhpOffice\PhpSpreadsheet\Style\Color;
$color = new Color();
色を設定
setRGB
メソッドを使用すると16進数のRGBカラー、setARGB
メソッドを使用すると16進数のRGBカラーに不透明度を含んだ色を設定できます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 設定する色を16進数で指定します。通常のRGBカラーは6桁(RRGGBB)、不透明度付きは8桁(AARRGGBB)で指定します。 |
// RGB
$color->setRGB('FF0000');
// ARGB
$color->setARGB('99FF0000');
色を取得
getRGB
メソッドを使用すると16進数のRGBカラー、getARGB
メソッドを使用すると16進数のRGBカラーに不透明度を含んだ色を取得することができます。
// RGB
$color = $color->getRGB();
// ARGB
$color = $color->getARGB();
文字に取り消し線を設定(変更)・取得
setStrikethrough
メソッドを使用することで、文字に取り消し線を設定(変更)することができます。
$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setStrikethrough(true);
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | bool | 取り消し線を付ける場合はtrue、取り消し線を付けない場合はfalseを指定します。 |
また、getStrikethrough
メソッドを使用することで、取り消し線が与えられているかそうでないかを取得します。
$isStrike = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->getStrikethrough();
文字に色を設定(変更)・取得
setColor
メソッドを使用することで、文字に色を設定(変更)することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | Color | 付ける色をColor クラスのオブジェクトで指定します。 |
use PhpOffice\PhpSpreadsheet\Style\Color;
$color = new Color();
$color->setRGB('FF0000');
$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setColor($color);
また、getColor
メソッドを使用することで、設定されている色を取得することができます。
$color = $spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->getColor();
文字の上下左右の位置揃えを設定(変更)・取得
setVertical
メソッドまたはsetHorizontal
メソッドで、文字の上下左右の位置揃えを設定(変更)することができます。
setVertical
メソッドは垂直方向、setHorizontal
メソッドは水平方向の位置を調整します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 揃える方向を指定します。また定数で指定することもできます。 |
定数 | 説明 |
---|---|
Alignment::VERTICAL_TOP | 上揃えにします。 |
Alignment::VERTICAL_CENTER | 上下中央揃えにします。 |
Alignment::VERTICAL_BOTTOM | 下揃えにします。 |
Alignment::VERTICAL_JUSTIFY | 均等割付にします。 |
Alignment::VERTICAL_DISTRIBUTED | 均等割付にします。Excel2007用です。 |
Alignment::HORIZONTAL_GENERAL | 初期位置にします。 |
Alignment::HORIZONTAL_LEFT | 左揃えにします。 |
Alignment::HORIZONTAL_RIGHT | 右揃えにします。 |
Alignment::HORIZONTAL_CENTER | 左右中央揃えにします。 |
Alignment::HORIZONTAL_CENTER_CONTINUOUS | 選択範囲内で左右中央揃えにします。 |
Alignment::HORIZONTAL_JUSTIFY | 均等割付にします。 |
Alignment::HORIZONTAL_FILL | 不明 |
Alignment::HORIZONTAL_DISTRIBUTED | 均等割付にします。Excel2007用です。 |
use PhpOffice\PhpSpreadsheet\Style\Alignment;
... 中略 ...
$alignment = $spreadsheet->getActiveSheet()->getStyle('A1')->getAlignment();
$alignment->setVertical(Alignment::VERTICAL_TOP);
$alignment->setHorizontal(Alignment::HORIZONTAL_CENTER);
また、getVertical
メソッドまたはgetHorizontal
メソッドを使用することで、設定されている位置揃えを取得することができます。
getVertical
メソッドは垂直方向、getHorizontal
メソッドは水平方向の位置です。
$vertical = $spreadsheet->getActiveSheet()->getStyle('A1')->getAlignment()->getVertical();
文字の折り返しの設定(変更)・取得
setWrapText
メソッドで、文字の折り返しの設定(変更)することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | bool | 文字を折り返すかどうかを指定します。 |
$spreadsheet->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);
また、getWrapText
メソッドを使用することで、折り返しの状態を取得することができます。
$isWrap = $spreadsheet->getActiveSheet()->getStyle('A1')->getAlignment()->getWrapText();
セルの塗り潰しオブジェクトの取得
getFill
メソッドを使用することで、セルの塗り潰しオブジェクトを取得することができます。
塗り潰しオブジェクトは塗り潰しに関する操作を行うためのオブジェクトです。
$fill = $spreadsheet->getActiveSheet()->getStyle('A1')->getFill();
セルに塗り潰しを設定(変更)・取得
セルに塗り潰しを設定(変更)する場合、いくつかのメソッドを組み合わせます。
setFillType
メソッドで塗り潰しパターンの種類を設定(変更)します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | Fill::FILL_NONE | パターンの種類を指定します。また定数で指定することもできます。 |
定数 | イメージ |
---|---|
Fill::FILL_NONE | |
Fill::FILL_SOLID | ![]() |
Fill::FILL_GRADIENT_LINEAR | ![]() |
Fill::FILL_GRADIENT_PATH | ![]() |
Fill::FILL_PATTERN_DARKDOWN | ![]() |
Fill::FILL_PATTERN_DARKGRAY | ![]() |
Fill::FILL_PATTERN_DARKGRID | ![]() |
Fill::FILL_PATTERN_DARKHORIZONTAL | ![]() |
Fill::FILL_PATTERN_DARKTRELLIS | ![]() |
Fill::FILL_PATTERN_DARKUP | ![]() |
Fill::FILL_PATTERN_DARKVERTICAL | ![]() |
Fill::FILL_PATTERN_GRAY0625 | ![]() |
Fill::FILL_PATTERN_GRAY125 | ![]() |
Fill::FILL_PATTERN_LIGHTDOWN | ![]() |
Fill::FILL_PATTERN_LIGHTGRAY | ![]() |
Fill::FILL_PATTERN_LIGHTGRID | ![]() |
Fill::FILL_PATTERN_LIGHTHORIZONTAL | ![]() |
Fill::FILL_PATTERN_LIGHTTRELLIS | ![]() |
Fill::FILL_PATTERN_LIGHTUP | ![]() |
Fill::FILL_PATTERN_LIGHTVERTICAL | ![]() |
Fill::FILL_PATTERN_MEDIUMGRAY | ![]() |
use PhpOffice\PhpSpreadsheet\Style\Fill;
$spreadsheet->getActiveSheet()->getStyle('A1')->getFill()->setFillType(Fill::FILL_SOLID);
setStartColor
メソッドまたはsetEndColor
メソッドまたはで色を設定(変更)します。
単色であればsetStartColor
メソッドのみ、グラデーションであれば両方のメソッドを使用します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | Color | 付ける色をColor クラスのオブジェクトで指定します。 |
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Color;
... 中略 ...
$color = new Color();
$color->setRGB('FF0000');
$spreadsheet->getActiveSheet()->getStyle('A1')->getFill()->setFillType(Fill::FILL_SOLID)->setStartColor($color);
またgetStartColor
メソッドまたはgetEndColor
メソッドで、それぞれのColor
クラスのインスタンスを取得することができます。
use PhpOffice\PhpSpreadsheet\Style\Fill;
... 中略 ...
$fill = $spreadsheet->getActiveSheet()->getStyle('A1')->getFill();
$fill->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('FF0000');
行やセルを繰り返す
getRowIterator
メソッドを使用することで、行を繰り返すことができます。
また、getCellIterator
メソッドを使用すると行からさらにセルを繰り返すことができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 任意 | int | 1 | 取得を開始する行番号を指定します。 |
第二引数 | 任意 | int | null | null | 取得を終了する行番号を指定します。 |
foreach ($spreadsheet->getActiveSheet()->getRowIterator() as $row) {
foreach ($row->getCellIterator() as $cell) {
echo $cell->getValue()."\n";
}
}
セルの罫線オブジェクトの取得
getBorders
メソッドを使用することで、セルの罫線オブジェクトを取得することができます。
罫線オブジェクトは罫線に関する操作を行うためのオブジェクトです。
$borders = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders();
罫線を引く
罫線の方向
罫線を引くにはまず、対象となる罫線を取得します。
メソッド | 位置 | イメージ |
---|---|---|
getTop |
上 | ![]() |
getBottom |
下 | ![]() |
getLeft |
左 | ![]() |
getRight |
右 | ![]() |
getOutline |
外周 | ![]() |
getInside |
内周 | ![]() |
getVertical |
垂直 | ![]() |
getHorizontal |
水平 | ![]() |
getAllBorders |
すべて | ![]() |
$borderTop = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getTop();
種類を指定して罫線を引く
setBorderStyle
メソッドを使用することで、罫線を引くことができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | bool | 罫線の種類を指定します。また定数で指定することもできます。なお、trueを指定するとBorder::BORDER_MEDIUM で罫線を引きます。 |
定数 | イメージ |
---|---|
Border::BORDER_NONE | |
Border::BORDER_DASHDOT | ![]() |
Border::BORDER_DASHDOTDOT | ![]() |
Border::BORDER_DASHED | ![]() |
Border::BORDER_DOTTED | ![]() |
Border::BORDER_DOUBLE | ![]() |
Border::BORDER_HAIR | ![]() |
Border::BORDER_MEDIUM | ![]() |
Border::BORDER_MEDIUMDASHDOT | ![]() |
Border::BORDER_MEDIUMDASHDOTDOT | ![]() |
Border::BORDER_MEDIUMDASHED | ![]() |
Border::BORDER_SLANTDASHDOT | ![]() |
Border::BORDER_THICK | ![]() |
Border::BORDER_THIN | ![]() |
Border::BORDER_OMIT |
use PhpOffice\PhpSpreadsheet\Style\Border;
... 中略 ...
$spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getTop()->setBorderStyle('medium');
// 定数
$spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getTop()->setBorderStyle(Border::BORDER_MEDIUM);
罫線の色を設定
setColor
メソッドで罫線の色を設定(変更)することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | Color | 付ける色をColor クラスのオブジェクトで指定します。 |
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
... 中略 ...
$color = new Color();
$color->setRGB('FF0000');
$borderTop = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getTop();
$borderTop->setBorderStyle(Border::BORDER_MEDIUM);
$borderTop->setColor($color);
またgetColor
メソッドで、Color
クラスのインスタンスを取得することができます。
use PhpOffice\PhpSpreadsheet\Style\Border;
... 中略 ...
$borderTop = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getTop();
$borderTop->setBorderStyle(Border::BORDER_MEDIUM);
$borderTop->getColor()->setRGB('FF0000');
セルのコメントを設定・取得
getComment
メソッドを使用することで、セルのコメントを操作するためのオブジェクトを取得します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 対象セルの番号を指定します。 |
$comment = $spreadsheet->getActiveSheet()->getComment('A1');
コメントのテキストを設定・取得
getText()->createTextRun
メソッドを使用すると、コメントのテキストを設定することができます。
$spreadsheet->getActiveSheet()->getComment('A1')->getText()->createTextRun("Hello World\nHello World");
またgetText()->getPlainText
メソッドを使用すると、設定されているコメントのテキストを取得することができます。
echo $spreadsheet->getActiveSheet()->getComment('A1')->getText()->getPlainText();
コメントを表示
setVisible
メソッドを使用すると、コメントを表示することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | bool | 表示する場合はtrue、表示しない場合はfalseを指定します。 |
echo $spreadsheet->getActiveSheet()->getComment('A1')->setVisible(true);
コメントの幅・高さを設定
setWidth
メソッドまたはsetheight
メソッドを使用すると、コメントの幅や高さを設定することができます。
setWidth
メソッドは幅、setheight
メソッドは高さを設定します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 設定する値を指定します。 |
echo $spreadsheet->getActiveSheet()->getComment('A1')->setWidth('240px')->setheight('160px');
画像を貼り付け
Drawing
クラスを使用することで、画像を扱うことができます。
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
$drawing = new Drawing();
ドキュメント:https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#add-a-drawing-to-a-worksheet
画像の読み込み
setPath
メソッドを使用することで、ローカルやネットワーク上の画像を読み込むことができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 画像のパスを指定します。ネットワーク上の場合はhttpから始まるURLを指定することで、読み込むことができます。 |
$drawing = new Drawing();
$drawing->setPath('source/image.jpg');
画像の幅や高さを設定
setWidth
メソッドまたはsetHeight
メソッドを使用することで、表示する画像の幅や高さを設定することができます。
setWidth
メソッドは幅、setHeight
メソッドは高さを設定します。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 設定する値を指定します。単位なしのピクセル値で指定します。 |
$drawing = new Drawing();
$drawing->setPath('img/sample.jpg');
$drawing->setWidth(240);
$drawing->setHeight(160);
ワークシートへ表示
setWorksheet
メソッドを使用することで、ワークシートへ表示させることができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | Worksheet | 画像を表示したいワークシートを指定します。 |
$drawing = new Drawing();
$drawing->setPath('img/sample.jpg');
$drawing->setWorksheet($spreadsheet->getActiveSheet());
セルへの表示位置の設定
setCoordinates
メソッドを使用することで、画像のセルへの表示位置を設定させることができます。
このメソッドを使用しない場合、初期で「A1」へ画像が表示されます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 表示したいセルの番号を指定します。 |
$drawing = new Drawing();
$drawing->setPath('img/sample.jpg');
$drawing->setCoordinates('C5');
$drawing->setWorksheet($spreadsheet->getActiveSheet());
表示位置の調整
setOffsetX
メソッドまたはsetOffsetY
メソッドを使用することで、画像の表示位置を調整することができます。
setOffsetX
メソッドは水平方向、setOffsetY
メソッドは垂直方向の調整を行います。
現在の位置から相対値で位置が調整されます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 調整する値を指定します。単位なしのピクセル値で指定します。 |
$drawing = new Drawing();
$drawing->setPath('img/sample.jpg');
$drawing->setOffsetX(5);
$drawing->setOffsetY(10);
$drawing->setWorksheet($spreadsheet->getActiveSheet());
回転
setRotation
メソッドを使用することで、画像を回転させることができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 回転する角度を単位無しで指定します。 |
$drawing = new Drawing();
$drawing->setPath('img/sample.jpg');
$drawing->setRotation(25); // 25度時計回りに回転
$drawing->setWorksheet($spreadsheet->getActiveSheet());
プロパティの設定
setName
メソッドまたはsetDescription
メソッドを使用することで、各プロパティを設定することができます。
setName
メソッドはタイトル、setDescription
メソッドは説明を設定します。
$drawing = new Drawing();
$drawing->setPath('img/sample.jpg');
$drawing->setName('Test');
$drawing->setDescription('Hello World.');
$drawing->setWorksheet($spreadsheet->getActiveSheet());
行と列を固定
freezePane
メソッドを使用すると、行または列を固定して表示することができます。
スクロールしても対象の行または列は常に表示された状態になります。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 固定を開始するセルの番号を指定します。指定したセルの左上を基準に固定されます。 | |
第一引数 | 任意 | string | null | 第一引数で固定された位置から表示を開始するセルの番号を指定します。 |
// B2の左上を固定
$spreadsheet->getActiveSheet()->freezePane('B2');
// B2の左上を固定しつつD4を固定位置に表示
$spreadsheet->getActiveSheet()->freezePane('B2', 'D4');
オートフィルターの設定
setAutoFilter
メソッドを使用すると、オートフィルターを設定することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | オートフィルターを設定するセルの範囲を指定します。 |
$worksheet = $spreadsheet->getActiveSheet();
// A1からD10まで
$worksheet->setAutoFilter('A1:D10');
// A列からD列まで
$worksheet->setAutoFilter('A:D');
// データが入っている全セル
$worksheet->setAutoFilter($worksheet->calculateWorksheetDimension());
ドキュメント:https://phpspreadsheet.readthedocs.io/en/latest/topics/autofilters/
プロパティの設定・取得
getProperties
メソッドでプロパティの操作を行うためのオブジェクトを取得します。
$props = $spreadsheet->getProperties();
各プロパティの設定
各プロパティはそれぞれのメソッドで設定することができます。
メソッド | 説明 |
---|---|
setCreator |
作成者 |
setLastModifiedBy |
更新者 |
setTitle |
タイトル |
setSubject |
件名 |
setDescription |
説明文章 |
setKeywords |
キーワード |
setCategory |
カテゴリー |
setCreated |
作成日 |
setModified |
更新日 |
$props = $spreadsheet->getProperties();
$props->setCreator('山田太郎');
$props->setLastModifiedBy('山田太郎');
$props->setTitle('タイトル');
$props->setSubject('件名');
$props->setDescription('説明');
$props->setKeywords('キーワード');
$props->setCategory('カテゴリー');
$props->setCreated(mktime(1, 12, 23, 1, 2, 2000));
$props->setModified(mktime(1, 12, 23, 1, 2, 2000));
各プロパティの取得
各プロパティはそれぞれのメソッドで取得することができます。
メソッド | 説明 |
---|---|
getCreator |
作成者 |
getLastModifiedBy |
更新者 |
getTitle |
タイトル |
getSubject |
件名 |
getDescription |
説明文章 |
getKeywords |
キーワード |
getCategory |
カテゴリー |
getCreated |
作成日 |
getModified |
更新日 |
$props = $spreadsheet->getProperties();
echo $props->getCreator();
echo $props->getLastModifiedBy();
echo $props->getTitle();
echo $props->getSubject();
echo $props->getDescription();
echo $props->getKeywords();
echo $props->getCategory();
echo $props->getCreated();
echo $props->getModified();
シートの保護
getProtection
メソッドでシートの保護の操作を行うためのオブジェクトを取得します。
$protection = $spreadsheet->getActiveSheet()->getProtection();
シートを保護・解除
setSheet
メソッドを使用することで、シートを保護したり解除したりすることができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | bool | シートを保護するかどうかを指定します。trueで保護、falseで解除します。 |
$spreadsheet->getActiveSheet()->getProtection()->setSheet(true);
シートをパスワード付きで保護・解除
setPassword
メソッドを使用することで、パスワード付きで保護したり解除することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | string | 設定または解除するパスワードを指定します。 |
$spreadsheet->getActiveSheet()->getProtection()->setSheet(true)->setPassword('1234');
セルの保護
セルの保護は少し特殊で、シート全体を保護して、特定のセルのみ保護を解除するという方法です。
getStyle
メソッドでセルの範囲を取得し、getProtection
メソッドで保護操作用オブジェクトを取得、setLocked
メソッドで解除します。
use PhpOffice\PhpSpreadsheet\Style\Protection;
... 中略 ...
// シートを保護
$spreadsheet->getActiveSheet()->getProtection()->setSheet(true);
// 特定のセルの保護を解除
$spreadsheet->getActiveSheet()->getStyle('A1:B2')->getProtection()->setLocked(Protection::PROTECTION_UNPROTECTED);
定数 | 説明 |
---|---|
Protection::PROTECTION_PROTECTED | 保護 |
Protection::PROTECTION_UNPROTECTED | 保護を解除 |
列(カラム)の幅を設定または取得
setWidth
メソッドを使用することで、列(カラム)の幅を設定することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 幅を指定します。 | |
第二引数 | 任意 | string | null | null | 第一引数の単位を指定します。 |
$worksheet->getColumnDimension('A')->setWidth(200);
$worksheet->getColumnDimension('A')->setWidth(200, 'px'); // 単位あり
また、getWidth
メソッドを使用することで、列(カラム)の幅を取得することができます。
$width = $worksheet->getColumnDimension('A')->getWidth();
行の高さを設定または取得
setRowHeight
メソッドを使用することで、行の高さを設定することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | int | 高さを指定します。 | |
第二引数 | 任意 | string | null | null | 第一引数の単位を指定します。 |
$worksheet->getRowDimension(1)->setRowHeight(30);
$worksheet->getRowDimension(1)->setRowHeight(30, 'px'); // 単位あり
また、getRowHeight
メソッドを使用することで、行の高さを取得することができます。
$height = $worksheet->getRowDimension(1)->getRowHeight(30, 'px');
別のワークシートを挿入
addExternalSheet
メソッドを使用することで、別のワークシートを挿入することができます。
引数 | 必須/任意 | 型 | 初期値 | 説明 |
---|---|---|---|---|
第一引数 | 必須 | Worksheet | 挿入するワークシートを指定します。 | |
第一引数 | 任意 | int | null | 挿入先のワークシートの位置をインデックス番号で指定します。省略した場合は末尾に挿入します。 |
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
$spreadsheet1 = (new Reader())->load('foo.xlsx');
$spreadsheet2 = (new Reader())->load('bar.xlsx');
$spreadsheet1->addExternalSheet($spreadsheet2->getActiveSheet());
【応用】ファイルとしてダウンロード
save
メソッドにphp://output
を指定することで、その場で出力することができます。
header
関数とあわせることで、その場でダウンロードさせることができます。
require('vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Writer;
$reader = new Reader();
$spreadsheet = $reader->load('sample.xlsx');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="sample-dl.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Writer($spreadsheet);
$writer->save('php://output');
メモリ不足になった場合
disconnectWorksheets
メソッドまたはdisconnectCells
メソッドでメモリを解放することができます。
disconnectWorksheets
メソッドはシート全体、disconnectCells
メソッドは対象のシートのメモリを解放します。
// シート全体
$spreadsheet->disconnectWorksheets();
// 特定のシート
$spreadsheet->getActiveSheet()->disconnectCells();
Discussion