[ 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']);