ユアスク by みんなシステムズ

MENU

LaravelとPHP SpreadsheetでExcelファイルを簡単に操作する方法

2023/03/26
【実例あり】Laravelのコレクションと連想配列の違いについて

こんにちは、野田です。システム開発において、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とさまざまな形式で出力もでき、使い勝手が非常によいライブラリです。

詳細はドキュメントを見ると分かりやすいです。

システム開発の現場では、エクセル処理は必ず使うので、ぜひ使えるようになっておくと良いでしょう。