Laravel 9でPhpSpreadsheetを使う方法

こんにちは!トビログ管理人のとびうおです!

今回はLaravel9でPhpSpreadsheetを使う方法について詳しく解説していきたいと思います。なお、Laravel9が正しくインストールされていることが前提です。

PhpSpreadsheetをインストールする

まず、PhpSpreadsheetをインストールします。

composer require phpoffice/phpspreadsheet

このようなコマンドを仕様すると、PhpSpreadsheetをインストールすることができます。

もし、sailを使っている場合は、

./vendor/bin/sail composer require phpoffice/phpspreadsheet

と打ちましょう。

とびうおくん
とびうおくん

それでも上手くいかない…!という場合は、

  • 正しいディレクトリにいることを確認
  • コマンドで出たエラーで検索

してみてください!
とびうおのTwitterに直接DMして聞いていただいても大丈夫です!

では、ここからは簡単に使っていきましょう!

controllerを試しに使ってみる

続いたらcontrollerを作成しましょう。

(※もし作成済みの方はこのセクションは飛ばしてOKです)

php artisan make:controller SpreadsheetController

もしくは、

./vendor/bin/sail php artisan make:controller SpreadsheetController

で作成可能です!

実際に簡単なメソッドを作る

// SpreadsheetController

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

public function blog()
    {
        $spreadsheet = new Spreadsheet();
        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        $writer->save('php://output');
    }

このようなメソッドを先ほどのcontrollerの中に作成し、そのcontrollerにアクセスできるようなRouteをweb.phpに定義しましょう。

// web.php

    Route::get('/blog',[SpreadsheetController::class,'blog'])->name('blog');

そうすると、/blogにアクセスするとエクセルファイルがダウンロードされるようになります。

Laravel 9でPhpSpreadsheetを使う方法
Laravel 9でPhpSpreadsheetを使う方法
とびうおくん
とびうおくん

これで真っ白なExcelファイルが出力されましたね!

PhpSpreadsheetでHello Worldをする

では、続いて、実際にExcelファイルに文字を入れていきましょう!

public function blog()
    {
        $spreadsheet = new Spreadsheet();

        $sheet = $spreadsheet->getActiveSheet();

        $sheet->setCellValue('A1', 'Hello');
        $sheet->setCellValue('B1', 'World !');

        $writer = new Xlsx($spreadsheet);

        $fileName = 'example.xlsx';

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'. $fileName .'"');
        header('Cache-Control: max-age=0');

        $writer->save('php://output'); // download file 
    }

このようなコードに書き換えましょう!

今回は $sheet->setCellValue('A1', 'Hello'); とあるように、A1にHelloを入れてあります!

このコードを実際にcontrollerに書き、再度/blogにアクセスすると以下のようなエクセルファイルがダウンロードされます。

Laravel 9でPhpSpreadsheetを使う方法
Laravel 9でPhpSpreadsheetを使う方法
とびうおくん
とびうおくん

これで好きなところに好きな文字を

入れられるようになったね!

PhpSpreadsheetの便利なメソッドたち

この項では簡単にPhpSpreadsheetの便利なメソッドを紹介したいと思います!

setCellValue()

特定のセルに値をセットすることができます。

phpCopy code$sheet->setCellValue('A1', 'Hello');

fromArray()

配列のデータを一括でワークシートにセットできます。

phpCopy code$data = [
    [1, 2],
    [3, 4],
    [5, 6]
];
$sheet->fromArray($data, null, 'A1');

getCellByColumnAndRow()

特定の行と列のセルを取得できます。

phpCopy code$cell = $sheet->getCellByColumnAndRow(1, 1);

mergeCells()

指定した範囲のセルをマージすることができます。

phpCopy code$sheet->mergeCells('A1:B1');

getStyle() and applyFromArray()

セルや範囲のスタイルを取得し、配列で定義されたスタイルを適用します。

phpCopy code$sheet->getStyle('B2')->applyFromArray([
    'font' => [
        'bold' => true,
        'color' => ['argb' => 'FFFF0000'],
    ],
    'alignment' => [
        'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
    ],
]);

getHighestRow() and getHighestColumn()

ワークシート内の最も高い行番号と列名を取得できます。これは大きなデータセットを処理するときに特に便利です!

phpCopy code$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn();

setAutoFilter()

ワークシートにオートフィルタをセットすることができます。

phpCopy code$sheet->setAutoFilter($sheet->calculateWorksheetDimension());

insertNewRowBefore()

指定した行の前に新しい行を挿入することができます。

phpCopy code$sheet->insertNewRowBefore(1, 1);
とびうおくん
とびうおくん

PhpSpreadsheetは色々便利なメソッドが多くあります!
ぜひ使ってみてください!

まとめ

PhpSpreadsheetをLaravelで簡単に使えるようになりましたか?

PhpSpreadsheetはとても便利なライブラリなのでぜひ活用していきましょう!!!

トビログではこれの記事以外にもLaravelのことを多く発信しています。ぜひ見てみてください!

Laravel
「Laravel」の記事一覧です。
とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました