Nội dung bài viết
Trong bất kì một ứng dụng PHP nào, chúng ta cũng cần phải có ít nhất một lần đụng tới việc trích xuất dữ liệu hoặc đọc dữ liệu từ file excel, chẳng hạn như báo cáo doanh thu bán hàng, ngân hàng, danh sách nhân viên, danh sách khách hàng,… Rất rất nhiều thứ phải cần đến đến việc đọc và ghi file excel bằng PHP.
Do đó, trong bài viết ngày hôm nay, mình sẽ hướng dẫn các bạn làm được điều này, bằng cách sử dụng thư viện hỗ trợ điều này, thư viện có tên PHPExcel. Đây là một thư viện hỗ trợ đọc và ghi file excel cực kì tốt và sử dụng rộng rãi
Đọc và ghi file excel bằng PHPExcel
1. Download thư viện PHPExcel
Để có thể đọc và ghi file excel, thì bạn cần phải download thư viện PHPExcel về tại đây :
https://github.com/PHPOffice/PHPExcel
Vào link trên, bên góc phải bạn sẽ thấy một nút màu xanh lá tên là Clone or Download. Click vào, rồi chọn Download zip. Sau đó, giải nén file zip ra và copy thư mục Classes cho vào thư mục gốc chứa ứng dụng web . Như vậy là chúng ta đã xong phần download thư viện PHPExcel, tiếp đến chúng ta sẽ tiến hành đọc và ghi file excel.
2. Đọc file excel
Đọc file excel chính là cách chúng ta load 1 file excel bên trong có chứa dữ liệu, rồi tiến hành trích xuất ra dữ liệu từ trong file này để dùng cho một mục đích nào đó tùy theo yêu cầu của hệ thống.
Các bạn download file mẫu excel tên là product.xlsx mà mình đã tạo sẵn, có nội dung hình dưới và đặt nó nằm cùng cấp với thư mục Classes:
Tiếp theo, bạn sẽ tiến hành đọc file này bằng cách tạo thêm 1 file mới tên là docfile.php cùng cấp với thư mục Classes, và gõ theo nội dung bên dưới:
<?php // Include thư viện PHPExcel_IOFactory vào include ‘Classes/PHPExcel/IOFactory.php’; $inputFileName = ‘product.xlsx’; // Tiến hành đọc file excel try { $inputFileType = PHPExcel_IOFactory::identify($inputFileName); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($inputFileName); } catch(Exception $e) { die(‘Lỗi không thể đọc file “‘.pathinfo($inputFileName,PATHINFO_BASENAME).'”: ‘.$e->getMessage()); } // Lấy thông tin cơ bản của file excel // Lấy sheet hiện tại $sheet = $objPHPExcel->getSheet(0); // Lấy tổng số dòng của file, trong trường hợp này là 6 dòng $highestRow = $sheet->getHighestRow(); // Lấy tổng số cột của file, trong trường hợp này là 4 dòng $highestColumn = $sheet->getHighestColumn(); // Khai báo mảng $rowData chứa dữ liệu // Thực hiện việc lặp qua từng dòng của file, để lấy thông tin for ($row = 1; $row <= $highestRow; $row++){ // Lấy dữ liệu từng dòng và đưa vào mảng $rowData $rowData[] = $sheet->rangeToArray(‘A’ . $row . ‘:’ . $highestColumn . $row, NULL, TRUE,FALSE); } //In dữ liệu của mảng echo “<pre>”; print_r($rowData); echo “</pre>”;
Tất cả từng dòng code mình đều có chú thích, bạn nên vừa đọc code vừa đọc chú thích comment để hiểu nhé. Tiếp theo bạn tiến hành thực thi file docfile.php này, sẽ thấy kết quả in ra màng hình là một mảng chứa tất cả thông tin của file excel product.xlsx.
Array ( [0] => Array ( [0] => Array ( [0] => STT [1] => product_name [2] => quantity [3] => price ) ) [1] => Array ( [0] => Array ( [0] => 1 [1] => php ebook [2] => 2 [3] => 100 ) ) [2] => Array ( [0] => Array ( [0] => 2 [1] => java ebook [2] => 1 [3] => 50 ) ) [3] => Array ( [0] => Array ( [0] => 3 [1] => laravel 5 [2] => 3 [3] => 120 ) ) [4] => Array ( [0] => Array ( [0] => 4 [1] => angularjs [2] => 5 [3] => 30 ) ) [5] => Array ( [0] => Array ( [0] => 5 [1] => python [2] => 4 [3] => 60 ) ) )
từ đó bạn có thể sử dụng mảng này cho mục đích thích hợp của bạn, như lưu vào cơ sở dữ liệu chẳng hạn.
3. Ghi dữ liệu ra file excel
Tương tự như file excel, chúng ta sẽ tiếp tục dùng thư viện PHPExcel để ghi dữ liệu ra file.
Đầu tiên, các bạn tạo 1 file mới, đặt tên là ghifile.php và 1 file tên là product_import.xlsx (file này tạo ra và để trống, ko cần điền nội dung, vì chúng ta sẽ điền nội dung vào bằng thư viện PHPExcel) và đặt 2 file này cùng cấp với file docfile.php. Các bạn mở file docfile.php lên và gõ nội dung như sau :
<?php // Include thư viện PHPExcel_IOFactory vào include ‘Classes/PHPExcel/IOFactory.php’; // Loại file cần ghi là file excel phiên bản 2007 trở đi $fileType = ‘Excel2007’; // Tên file cần ghi $fileName = ‘product_import.xlsx’; // Load file product_import.xlsx lên để tiến hành ghi file $objPHPExcel = PHPExcel_IOFactory::load(“product_import.xlsx”); // Giả sử chúng ta có mảng dữ liệu cần ghi như sau $array_data = array( 0 => array(‘name’ => ‘Hieu’, ’email’ => ‘hieu@gmail.com’, ‘phone’ => ‘0123456789’, ‘address’ => ‘address 1’), 1 => array(‘name’ => ‘Nam’, ’email’ => ‘nam@gmail.com’, ‘phone’ => ‘0124567892’, ‘address’ => ‘address 2’), 2 => array(‘name’ => ‘Tuan’, ’email’ => ‘tuan@gmail.com’, ‘phone’ => ‘09764346789’, ‘address’ => ‘address 3’), 3 => array(‘name’ => ‘Mai’, ’email’ => ‘mai@gmail.com’, ‘phone’ => ‘09876543356’, ‘address’ => ‘address 4’), 4 => array(‘name’ => ‘Thao’, ’email’ => ‘thao@gmail.com’, ‘phone’ => ‘0975458979’, ‘address’ => ‘address 5’), ); // Thiết lập tên các cột dữ liệu $objPHPExcel->setActiveSheetIndex(0) ->setCellValue(‘A1’, “STT”) ->setCellValue(‘B1’, “Name”) ->setCellValue(‘C1’, “Email”) ->setCellValue(‘D1’, “Phone”) ->setCellValue(‘E1’, “Address”); // Lặp qua các dòng dữ liệu trong mảng $array_data và tiến hành ghi dữ liệu vào file excel $i = 2; foreach ($array_data as $value) { $objPHPExcel->setActiveSheetIndex(0) ->setCellValue(“A$i”, “$i”) ->setCellValue(“B$i”, $value[‘name’]) ->setCellValue(“C$i”, $value[’email’]) ->setCellValue(“D$i”, $value[‘phone’]) ->setCellValue(“E$i”, $value[‘address’]); $i++; } $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $fileType); // Tiến hành ghi file $objWriter->save($fileName);
Cuối cùng chạy file ghifile.php và mở file product_import.xlsx lên, các bạn sẽ thấy dữ liệu đã được ghi vào bao gồm 5 dòng tương ứng số dòng dữ liệu trong array $array_data nhé.
Như vậy, mình đã giới thiệu các bạn cách để đọc và ghi file excel bằng thư viện PHPExcel. Có bất kỳ thắc mắc nào hãy để lại comment bên dưới nhé. Đừng quên đăng ký nhận bài viết ở thanh sidebar bên phải để cập nhật các bài viết mới nhất từ trang.
Có thể tham khảo thêm bài viết về xử lý file text tại đây
Chúc các bạn học tốt !