[ Web 관련 ]/Laravel

라라벨 엑셀 다운로드 업로드

BIZLAB 2024. 6. 15. 20:15

maatwebsite/excel 모듈을 설치 했으나 정상 적으로 설치 되지 않아서

 

삭제 하고,

composer remove maatwebsite/excel

 

phpspreadsheet 패키지를 설치

composer require phpoffice/phpspreadsheet

 

컨트롤러 예시

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class ExportController extends Controller
{
    public function export(Request $request)
    {
        $tableName = $request->get('table');
        if (!$tableName) {
            return redirect()->back()->with('error', 'Table name is required.');
        }

        // 임의로 작성한 컬럼 이름
        $headings = [
            'ID',
            'Name',
            'Email',
            'Created At',
            'Updated At'
        ];

        // 데이터 조회
        $data = DB::table($tableName)->select('id', 'name', 'email', 'created_at', 'updated_at')->get();

        // 스프레드시트 생성
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        // 헤더 추가
        $sheet->fromArray($headings, null, 'A1');

        // 데이터 추가
        $rows = [];
        foreach ($data as $row) {
            $rows[] = (array) $row;
        }
        $sheet->fromArray($rows, null, 'A2');

        // 엑셀 파일 다운로드
        $writer = new Xlsx($spreadsheet);
        $fileName = $tableName . '.xlsx';
        $temp_file = tempnam(sys_get_temp_dir(), $fileName);
        $writer->save($temp_file);

        return response()->download($temp_file, $fileName)->deleteFileAfterSend(true);
    }
}

 

라우트 정의

use App\Http\Controllers\ExportController;

Route::get('/export', [ExportController::class, 'export']);