Thumbnail
Category: Laravel

Nhập xuất dữ liệu excel trong laravel

Date: July 3, 2020
36 views

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


Copyright © 2025 All Right Reserved