Đọc file excel trong php

Download Source

Trong thực tế, đôi lúc chúng ta sẽ cần phải truy - xuất dữ liệu bằng file excel (Microsoft 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à bài hôm nay mình sẽ hướng dẫn mọi người có thể làm được điều đó với thư viện PHPExcel.

1, Tổng quan.

-PHPExcel là thư viện giúp cho chúng ta có thể truy xuất dữ liệu từ file excel một cách đơn giản, và để sử dụng được nó thì server của các bạn phải đáp ứng đủ các yêu cầu sau:

  • PHP phiên bản từ 5.2.0 trở lên.
  • PHP extension php_zip enabled [^phpzip_footnote].
  • PHP extension php_xml enabled.
  • PHP extension php_gd2 enabled (if not compiled in).

-Sau khi đã đáp ứng đủ các yêu cầu trên thì việc tiếp theo chúng ta cần là download thư viện PHPexcel về máy để thực hiện các bước tiếp theo (download).

-Đầu tiên muốn sử dụng được thư viện thì các bạn cần phải require file PHPExcel.php (trong thư mục Classes) vào nơi muốn sử dụng. Và dưới đây mình sẽ demo cho các bạn một ví dụ về ghi dữ liệu vào file excel (giải thích trong code luôn):

n)
$excel->setActiveSheetIndex(0);
//Tạo tiêu đề cho trang. (có thể không cần)
$excel->getActiveSheet()->setTitle('demo ghi dữ liệu');

//Xét chiều rộng cho từng, nếu muốn set height thì dùng setRowHeight()
$excel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('C')->setWidth(30);

//Xét in đậm cho khoảng cột
$excel->getActiveSheet()->getStyle('A1:C1')->getFont()->setBold(true);
//Tạo tiêu đề cho từng cột
//Vị trí có dạng như sau:
/**
 * |A1|B1|C1|..|n1|
 * |A2|B2|C2|..|n1|
 * |..|..|..|..|..|
 * |An|Bn|Cn|..|nn|
 */
$excel->getActiveSheet()->setCellValue('A1', 'Tên');
$excel->getActiveSheet()->setCellValue('B1', 'Giới Tính');
$excel->getActiveSheet()->setCellValue('C1', 'Đơn giá(/shoot)');
// thực hiện thêm dữ liệu vào từng ô bằng vòng lặp
// dòng bắt đầu = 2
$numRow = 2;
foreach ($data as $row) {
    $excel->getActiveSheet()->setCellValue('A' . $numRow, $row[0]);
    $excel->getActiveSheet()->setCellValue('B' . $numRow, $row[1]);
    $excel->getActiveSheet()->setCellValue('C' . $numRow, $row[2]);
    $numRow++;
}
// Khởi tạo đối tượng PHPExcel_IOFactory để thực hiện ghi file
// ở đây mình lưu file dưới dạng excel2007
PHPExcel_IOFactory::createWriter($excel, 'Excel2007')->save('data.xlsx');

-Nếu như các bạn muốn xuất ra cửa sổ download thì chỉ cần sửa dòng cuối cùng thành:

header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="data.xls"');
PHPExcel_IOFactory::createWriter($excel, 'Excel2007')->save('php://output');

-Và đây là kết quả chúng ta thu được:

Đọc file excel trong php

3, Đọc dữ liệu từ file excel.

-Mình sẽ demo đọc file data.xlsx chúng ta vừa tạo ở phần trên và giải thích luôn trong code.

setReadDataOnly(true);

// Load dữ liệu sang dạng đối tượng
$objPHPExcel = $objData->load($file);

//Lấy ra số trang sử dụng phương thức getSheetCount();
// Lấy Ra tên trang sử dụng getSheetNames();

//Chọn trang cần truy xuất
$sheet = $objPHPExcel->setActiveSheetIndex(0);

//Lấy ra số dòng cuối cùng
$Totalrow = $sheet->getHighestRow();
//Lấy ra tên cột cuối cùng
$LastColumn = $sheet->getHighestColumn();

//Chuyển đổi tên cột đó về vị trí thứ, VD: C là 3,D là 4
$TotalCol = PHPExcel_Cell::columnIndexFromString($LastColumn);

//Tạo mảng chứa dữ liệu
$data = [];

//Tiến hành lặp qua từng ô dữ liệu
//----Lặp dòng, Vì dòng đầu là tiêu đề cột nên chúng ta sẽ lặp giá trị từ dòng 2
for ($i = 2; $i <= $Totalrow; $i++) {
    //----Lặp cột
    for ($j = 0; $j < $TotalCol; $j++) {
        // Tiến hành lấy giá trị của từng ô đổ vào mảng
        $data[$i - 2][$j] = $sheet->getCellByColumnAndRow($j, $i)->getValue();;
    }
}
//Hiển thị mảng dữ liệu
echo '
';
var_dump($data);

 -Sau khi chạy file, bạn sẽ thu được kết quả như sau:

Đọc file excel trong php

-Ở trên mình chỉ demo và var_dump() biến data, còn các bạn sử dụng biến data để thêm vào database hay dùng để hiển thị kiểu khác thì các bạn có thể tùy chỉnh nhé!

3, Lời kết.

-Phần này mình chỉ demo chức năng đọc, ghi cơ bản còn các bạn muốn nâng cao hơn thì có thể tham khảo thêm các ví dụ tại đây.

Chúc các bạn một ngày vui vẻ!

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Bài Viết Mới