PHPExcel – Import và Export xử lý Excel
Đôi lúc chúng ta sẽ cần phải truy – xuất dữ liệu bằng file Excel như: xuất dữ liệu thống kê ra cho người dùng, hoặc import nhiều dữ liệu từ file excel vào Database. Thư viện được sử dụng nhiều nhất hiện nay là PHPOffice/PHPExcel. Đọc và ghi file excel bằng PHP thuần Đọc file ...
Đôi lúc chúng ta sẽ cần phải truy – xuất dữ liệu bằng file Excel như: xuất dữ liệu thống kê ra cho người dùng, hoặc import nhiều dữ liệu từ file excel vào Database. Thư viện được sử dụng nhiều nhất hiện nay là PHPOffice/PHPExcel.
Đọc và ghi file excel bằng PHP thuần
Đọc file excel
Các bạn tải file data mẫu excel này 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?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>"; |
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àn hình là một mảng chứa tất cả thông tin của file excel product.xlsx.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
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.
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<?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é.
Đọc và ghi file excel bằng Laravel
Import dữ liệu từ file excel
Giả sử bài toán là 1 lượng lớn dữ liệu địa chỉ trong đó có phân cấp Tỉnh/Thành Phố, Quận/Huyện, Xã /Phường. Và ta đã biết 1 Tỉnh/Thành Phố có nhiều Quận/Huyện, 1 Quận/Huyện có nhiều Xã/Phường. Như vậy ta sẽ thiết kế DB với 3 bảng như sau: provinces, districts, wards.
Trong bài demo này mình sẽ sử dụng Laravel và dùng Seed để import dữ liệu. Mình đã tạo project, migrate các bạn có thể xem trong source code. Dữ liệu dùng để demo là Tổng hợp địa giới hành chính Việt Nam.
Trước hết ta cài đặt thư viện vào project Laravel bằng dòng lệnh:
composer require phpoffice/phpexcel
Nhìn vào dữ liệu của file excel trên ta thấy có 3 sheet tỉnh, huyện, xã đã được khai báo khá rõ ràng nên ta có thể tưởng tượng ra được cách làm là đọc dữ liệu từng sheet một và insert vào các bảng tương ứng. Hiện thực hóa ý tưởng trên ta được kết quả:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?
Có thể bạn quan tâm
0
|