Hướng dẫn đọc và ghi file excel bằng PHP

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:

đọc và ghi file excel bằng PHPExcel

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é.

Gợi ý : Bạn là người mới và muốn tìm hiểu về Bitcoin nhưng không biết bắt đầu từ đâu? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới nhé!

ghi file excel voi phpexcel

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 !

 

Hiếu

"Những người điên rồ tới mức nghĩ mình có thể thay đổi được thế giới chính là những người có thể làm được điều đó" _ Steve Job

Subscribe
Notify of
guest

20 Bình Luận
Inline Feedbacks
Xem Tất Cả Bình Luận
Hùng
Hùng
11 tháng trước

Bnaj ơi cho mình hỏi với mình đọc file báo lỗi
Lỗi không thể đọc file “abc.xlsx”: Could not open https://abc.com/wp-content/uploads/2023/07/abc.xlsx for reading! File does not exist.
Mặc dù file đó mình vào vẫn có file đó copy nguyên link vẫn ra file

Em Quang Hưng
Em Quang Hưng
11 tháng trước

Thầy ơi! em làm theo hướng dẫn nhưng khi chạy file docfile.php máy báo lỗi: Fatal error: Array and string offset access syntax with curly braces is no longer supported in C:\xampp\htdocs\db1656\Classes\PHPExcel\Shared\String.php on line 526 là lỗi gì ạ. Thầy hướng dẫn giúp em với ạ. Thanks thầy

error: Content is protected !!
20
0
Bạn có ý kiến về bài viết, hãy để lại bình luận nhé!x
()
x