Blog スタッフブログ

Laravel システム開発

[Laravel]エクセルの出力

システム開発担当のTFです。

やり方

  • PHPSpreadsheet のライブラリを入れる
  • PHPSpreadsheet で出力したいエクセルを作成する
  • 作成したエクセルをダウンロードさせる

サンプル

composer require phpoffice/phpspreadsheet
<?php

// 省略

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Style\Fill;

class TestController extends Controller
{
	// 省略
	
	/**
     * ダウンロード
     */
    public function download(Request $request)
    {
		$spreadsheet = new Spreadsheet();
		$sheet = $spreadsheet->getActiveSheet();
		
		// データの作成
		$row = 1;
		
		// タイトル
		$sheet->setCellValue("B{$row}", 'テストタイトル');
		$sheet->mergeCells("B{$row}:I".($row+1)); //指定範囲のセル結合
		$sheet->getStyle("B{$row}")->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
		$sheet->getStyle("B{$row}")->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
		$sheet->getStyle("B{$row}")->getFont()->setSize('23');
		
		$row+=2;
		
		// データの作成
		$data = ['id', '日付', '金額'];
		$sheet->fromArray($data, null, "B{$row}");
	
		$row++;

		
		// Excelファイルをブラウザからダウンロードする
		$fileName = 'テスト_' . date('Ymd') . '.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;
		
	}

}