Nhập xuất dữ liệu excel trong laravel
1. Cài đặt
Ở đâ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;
2. Xuất dữ liệu
$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
- Dòng 3: tạo sheet mới
- Dòng 4,5: Lấy sheet active và đặt tên sheet
- Dòng 7-16: định dạng cột
- Dòng 60-62: xuất ra download của trình duyệt
- Lưu ý: Khi up lên site thì dòng nếu bị lỗi thì dòng 62 thay Excel2007 thành Excel5 nhé!
Và đây là kết quả:
3. Nhập dữ liệu
$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!'; }
- dòng 26 – 31: là đọc file excel và lấy dữ liệu
Tham Khảo
- https://topdev.vn/blog/phpexcel/#doc-va-ghi-file-excel-bang-laravel
Đây là trang web khá hay, hướng dẫn đầy đủ cả nhập và xuất excel cả PHP thuần và Laravel - https://toidicode.com/doc-ghi-du-lieu-file-excel-voi-phpexcel-147.html
Còn trang web này tuy không hướng dẫn cho Laravel nhưng nó nói khá rõ về thư viện PHPExcel - https://viblo.asia/p/cakephp-xuat-du-lieu-ra-excel-su-dung-thu-vien-phpexcel-p2-Q7eEREK4GgNj Bài viết này cho mình biết cách định dạng file excel trong thư viện PHPExcel