【CakePHP】PhpSpreadsheetによるExcelファイルの読み書き

#PHP
written by みよしや

こんにちは、みよしやです。

今回は、CakePHP4でExcelファイルの読み込み・書き込みを行う方法を紹介します。
CakePHPについては前回の記事で説明していますので、そちらをご覧ください。
https://goat-inc.co.jp/blog/1945/

PhpSpreadsheetとは

PhpSpreadsheetは、様々なスプレッドシートファイルを読み書きできるPHPライブラリです。
以前はExcelファイルの操作にはPhpExcelというライブラリが使用されていましたが、
こちらが非推奨となったため、現在はPhpSpreadsheetを使用する必要があります。

 

Excelファイルの読み込み方法

$file = \PhpOffice\PhpSpreadsheet\IOFactory::load('/var/www/html/excel/sample01.xlsx');

まず、ファイル名を指定してExcelファイルを読み込みます。

$workSheet = $file->getSheetByName('sample_sheet01');use Cake\Mailer\Mailer;

次に、シート名を指定して、編集するシート情報を取得します。。

// 開いた時に選択されているシートを取得
$workSheet = $file->getActiveSheet();
// シート番号を指定して取得
$workSheet = $file->getSheet(3);$mailer = new Mailer();

上記のように記述することで、シート名を指定せずに取得することも可能です。

$workSheet->getCell('A1')->getValue();

指定したセルの値を取得します。

 

Excelファイルの新規作成方法

$file = new \PhpOffice\PhpSpreadsheet\Spreadsheet();

まず、スプレッドシートを生成します。

$workSheet = $file->getSheet(0);

次に、編集するシートを取得します。
新規作成したスプレッドシートにはあらかじめシートが1つ用意されているため、
getSheet(0)という指定にします。

$workSheet->setCellValue('A1', '書き込みテスト');

setCellValue(セル番号, 値)でセルに値を入力します。

$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($file);
$writer->save('/var/www/html/excel/sample02.xlsx');

\Writer\Xlsxを使用して、Excelファイルとして保存します。

 

サンプルコード

既存Excelファイルの読み込み・書き込み・保存を行うサンプルになります。

// 対象ファイルのフルパス
$filePath = '/var/www/html/excel/sample01.xlsx';

// 対象のExcelファイルを読み込む
$file = \PhpOffice\PhpSpreadsheet\IOFactory::load($filePath);

// 'sample_sheet01'という名前のシートを読み込む
$workSheet = $file->getSheetByName('sample_sheet01');

// A1セルに'書き込みテスト'という文字列を入力
$workSheet->setCellValue('A1', '書き込みテスト');

// 変更を保存する(saveで最初と違うファイル名をした場合は別ファイルが作成される)
$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($file);
$writer->save($filePath);

 

最後に

PhpSpreadsheetはCSVなどExcel以外にも対応していますが、
PHPでExcelを編集する機会のほうが多かったので、今回はExcelファイルを対象としました。
CSVファイルの編集については、また別の記事で書きたいと思います。

ご覧いただきありがとうございました。