Ở đây mình sẽ hướng dẫn cho phần Laravel, còn về PHP thuần thì mình sẽ để link các nguồn tham khảo bên dưới.
Đầu tiên bạn cài thư viện bằng câu lệnh sau:
composer require phpoffice/phpexcel
Chỗ nào cần sử dụng Excel thì bạn thêm các dòng sau vào:
use PHPExcel; use PHPExcel_IOFactory;
$data = $this->thucTap->getAll(); $excel = new PHPExcel(); $excel->createSheet(); $activeSheet = $excel->setActiveSheetIndex(1); $activeSheet->setTitle( "Dữ Liệu Thực Tập" ); $excel->getActiveSheet()->getColumnDimension('A')->setWidth(5); $excel->getActiveSheet()->getColumnDimension('B')->setWidth(30); $excel->getActiveSheet()->getColumnDimension('C')->setWidth(30); $excel->getActiveSheet()->getColumnDimension('D')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('E')->setWidth(30); $excel->getActiveSheet()->getColumnDimension('F')->setWidth(10); $excel->getActiveSheet()->getColumnDimension('G')->setWidth(30); $excel->getActiveSheet()->getColumnDimension('H')->setWidth(30); $excel->getActiveSheet()->getColumnDimension('I')->setWidth(30); $excel->getActiveSheet()->getStyle('A2:I2')->getFont()->setBold(true); $activeSheet->setCellValue('A2', 'STT') ->setCellValue('B2', 'Email sinh viên') ->setCellValue('C2', 'Tên sinh viên') ->setCellValue('D2', 'Điểm trung bình') ->setCellValue('E2', 'Tên người chấm') ->setCellValue('F2', 'Số điểm') ->setCellValue('G2', 'Nhận xét') ->setCellValue('H2', 'Ngày bắt đầu thực tập') ->setCellValue('I2', 'Ngày kết thúc thực tập'); $numRow = 3; $stt = 1; foreach ($data as $value) { $excel->getActiveSheet()->setCellValue('A' . $numRow, $stt); $excel->getActiveSheet()->setCellValue('B' . $numRow, $value->getDataSinhVien( 'email' ) ); $excel->getActiveSheet()->setCellValue('C' . $numRow, $value->getDataSinhVien( 'ten' ) ); $excel->getActiveSheet()->setCellValue('D' . $numRow, $value->tinh_diem_trung_binh( $value ) ); $excel->getActiveSheet()->setCellValue('E' . $numRow, $value->getDataGiangVien( 'ten' ) ); $excel->getActiveSheet()->setCellValue('F' . $numRow, $value->getDataDiem( 'diem', 'giang-vien' ) ); $excel->getActiveSheet()->setCellValue('G' . $numRow, $value->getDataDiem( 'nhanxet', 'giang-vien' ) ); $excel->getActiveSheet()->setCellValue('H' . $numRow, $value->getNgayBatDauThucTap() ); $excel->getActiveSheet()->setCellValue('I' . $numRow, $value->getNgayKetThucThucTap() ); $numRow++; $excel->getActiveSheet()->setCellValue('E' . $numRow, $value->getDataNguoiHuongDan( 'ten' ) ); $excel->getActiveSheet()->setCellValue('F' . $numRow, $value->getDataDiem( 'diem', 'nguoi-huong-dan' ) ); $excel->getActiveSheet()->setCellValue('G' . $numRow, $value->getDataDiem( 'nhanxet', 'nguoi-huong-dan' ) ); $excel->getActiveSheet()->setCellValue('H' . $numRow, $value->getNgayBatDauThucTap() ); $excel->getActiveSheet()->setCellValue('I' . $numRow, $value->getNgayKetThucThucTap() ); $numRowMergePrevious = $numRow - 1; $activeSheet->mergeCells("A$numRowMergePrevious:A$numRow"); $activeSheet->mergeCells("B$numRowMergePrevious:B$numRow"); $activeSheet->mergeCells("C$numRowMergePrevious:C$numRow"); $activeSheet->mergeCells("D$numRowMergePrevious:D$numRow"); $numRow++; $stt++; } header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="duLieuThucTap.xlsx"'); PHPExcel_IOFactory::createWriter($excel, 'Excel2007')->save('php://output'); //Khi up site thày thành Excel5
Và đây là kết quả:
$fileName = ""; $fileSize = ""; if ( isset( $data['fileToUpload'] ) ) { $file = $data['fileToUpload']; //Lấy Tên files $fileName = $file->getClientOriginalName(); if( strpos( $fileName, ".xls" ) || strpos( $fileName, ".xlsx" ) ) { } else return 'File không hợp lệ!'; //Lấy kích cỡ của file đơn vị tính theo bytes $fileSize = $file->getSize(); if( $fileSize > 10485760 ) return 'Kích thước file quá lớn!'; } if($fileName != "" && $fileSize < 10485760) { $thongTin = "Các dòng dữ liệu không insert thành công"; $loi = 0; $file = $data['fileToUpload']; $file->move("public/img/upload", $file->getClientOriginalName()); $objPHPExcel = PHPExcel_IOFactory::load(base_path("public/img/upload/$fileName")); // load file ra object PHPExcel $provinceSheet = $objPHPExcel->setActiveSheetIndex(0); // Set sheet sẽ được đọc dữ liệu $highestRow = $provinceSheet->getHighestRow(); // Lấy số row lớn nhất trong sheet for ($row = 2; $row <= $highestRow; $row++) { // For chạy từ 2 vì row 1 là title $ma = $provinceSheet->getCellByColumnAndRow(0, $row)->getValue(); // lấy dữ liệu từng ô theo col và row $ten = $provinceSheet->getCellByColumnAndRow(1, $row)->getValue(); $data_item = array( "ma-nganh" => $ma, "ten-nganh" => $ten, ); if( !$this->them_nganh( $data_item ) ) { $loi = 1; $thongTin .= "\\n$ma - $ten"; } } if($loi == 0) { $thongTin = "Nhập dữ liệu thành công"; return $thongTin; } else return $thongTin; } else { return 'Lỗi file!'; }