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

ghi file excel voi phpexcel

Gợi ý: Bạn đang quan tâm đến Bitcoin? Tìm hiểu ngay Bitcoin Toàn Tập Cho Người Mới 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 !

 

Chia sẻ nhanh bài viết ↓

Hieu

"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
Newest
Oldest Most Voted
Hùng
Hùng
2 năm 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
2 năm 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

van_nguyen
van_nguyen
6 năm trước

mình bị lỗi các ô dữ liệu sử dụng hàm vlookup, có cách nào lấy text từ các ô đó ra ko nhỉ?

Nguyễn Văn Nam
Nguyễn Văn Nam
7 năm trước

bạn cho mình hỏi tên SHEET Của mình đã được đổi rồi thì làm sao mình có thể đọc được SHEET đó

Nguyễn văn nam
Nguyễn văn nam
Phản hồi đến  Hieu
7 năm trước

Cái đó mình làm đc rồi tks bạn. Mà mình bị lỗi hiển thị tiếng việt khi đọc nội dung từ trong file excel ra. Bạn có cách nào giải quyết ko giúp mình với

Nguyễn văn nam
Nguyễn văn nam
Phản hồi đến  Hieu
7 năm trước

Sao ko được bạn ơi hjx mình vẫn thấy bị lỗi hiển thị

Nguyễn Văn Nam
Nguyễn Văn Nam
Phản hồi đến  Hieu
7 năm trước

Bạn ơi khi mình chuyển qua định dạng Json_encode thì nó bị lỗi hiển thị. có cách nào khắc phục không bạn

Nguyễn Ngọc Bảo Han
Nguyễn Ngọc Bảo Han
7 năm trước

Bạn ơi cho mình hỏi, do bảng dữ liệu của mình chưa biết trước được số cột cần hiện thị(nếu biết trước các cootjj xuất ra là A, B, C, D thì ok rồi), tuy nhiên trường hợp của mình số cột xuất ra không cố định(do người dùng tích chọn) vậy phải làm thế nào? Xin cảm ơn!

Nguyễn Ngọc Bảo Han
Nguyễn Ngọc Bảo Han
Phản hồi đến  Hieu
7 năm trước

Vấn đề là xuất ra những cột nào trong excel, vì mẫu excel trong trường hợp này ko fix đc những cột nào cả

Phạm Chinh
Phạm Chinh
8 năm trước

Cho mình hỏi xuất ra để hiển thị được tiếng việt thì làm sao ?
Tiếng anh thì ok nhưng tiếng việt lại bị mất dấu.

hồng nhi
hồng nhi
9 năm trước

Bạn ơi cho mình hỏi, do bảng dữ liệu của mình có 1 trường số (6000005600007850) khi xuất ra file excel bị lỗi (6.00001E+15) –> hiển thị không đầy đủ, bạn cho mình hỏi có cách nào để hiển thị đủ không? Xin cảm ơn

hồng nhi
hồng nhi
Phản hồi đến  Hieu
9 năm trước

Cảm ơn bạn, mình đã làm được rồi. Thanks

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