こんにちは、野田です。システム開発において、Excelを使う機会はよくあります。
この記事では、LaravelにPHP Spreadsheetを導入し、Excelファイルを操作する方法を説明します。
目次
PHP Spreadsheetについて
PHP spreadsheetはPHPで書かれたライブラリです。以前はPHPでExcel処理をする場合、PHP Excelが使われていましたが、そのライブラリの後に出てきたものです。
PHP 7.3以上の環境で動きます。
PHP Spreadsheetについて https://phpspreadsheet.readthedocs.io/en/latest/
インストール方法
まず、PHP Spreadsheetをインストールする必要があります。これはComposerを使用して行うことができます。以下のコマンドを実行して、PHP Spreadsheetをインストールします。
composer require phpoffice/phpspreadsheet
実装例1: エクセルダウンロード(書き込み)
データをDB等から取得してその結果をエクセルで出力する方法です。
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
public function download()
{
$spreadsheet =new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
//今は単純な配列のデータにしているが、実際にはこのデータを作るためにDBから情報を取り出し、配列に入れる処理が必要。
$data = [
['名前', 'ひらがな', '年齢', '性別'],
['太郎', 'たろう', '12才', '男'],
['花子', 'はなこ', '15才', '女'],
];
$sheet->fromArray($data, null, 'A1');
// Excelファイルをブラウザからダウンロードする
$fileName = 'ユーザーリスト' . date('Y_m_d') . '.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;');
header("Content-Disposition: attachment; filename=\"{$fileName}\""); header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
}
実装例2:アップロードされたエクセルのデータを読み込む(読み込み)
*前提としてExcelファイルがformでPOSTされた状態であること
public function uploadExcelFile(Request $request)
{
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($request->file('file')->getRealPath());
$sheet = $spreadsheet->getActiveSheet(); //シートを読み込み
$sheetData = $sheet->toArray(); //シートの中身を配列にして返す
dump($sheetData);
//エクセルのデータが配列になったので、この配列をもとに加工したりして、DBに入れたりする。
}
実装例3:画像付きのエクセルファイルを出力する(書き込み)
public function downloadWithPicture()
{
$spreadsheet =new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
//セルを指定して値を書き込む
$sheet->setCellValue('A1', 'Hello World !');
$sheet->setCellValue('A2', '指定したセルに画像を入れることができます');
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('test1'); //名前設定
$drawing->setDescription('test1'); //説明
$drawing->setCoordinates('A4'); //入れるセルの場所
$drawing->setPath(public_path('images/logo/test1.png')); //画像のデータ
$drawing->setHeight(50); //高さ
$drawing->setWidth(50); //幅 高さと幅はどちらかあればOK
$drawing->setWorksheet($sheet); //シートに追加
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('test2'); //名前設定
$drawing->setCoordinates('D4'); //入れるセルの場所
$drawing->setPath(public_path('images/logo/test2.png')); //画像のデータ
$drawing->setWidth(50); //幅 高さと幅はどちらかあればOK
$drawing->setOffsetX(110); //X軸にずらす
$drawing->setWorksheet($sheet); //シートに追加
// Excelファイルをブラウザからダウンロードする
$fileName = 'image.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;');
header("Content-Disposition: attachment; filename=\"{$fileName}\""); header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
}
まとめ
この記事ではLaravelでのPHP Spreadsheetのインストール方法、使い方をご紹介しました。
PHP SpreadSheetはPHPでもLaravelでも両方使えます。Excel, CSV,PDFとさまざまな形式で出力もでき、使い勝手が非常によいライブラリです。
詳細はドキュメントを見ると分かりやすいです。
システム開発の現場では、エクセル処理は必ず使うので、ぜひ使えるようになっておくと良いでしょう。