Bài 01: Lấy dữ liệu từ mysql lưu vào file excel với PHPExcel

Đôi lúc làm việc với những dự án mà khách hàng thường lưu trữ dữ liệu trong file excel vì sự tiện lợi của nó, điều này đôi khi gây khó khăn cho coder vì việc đọc file excel không phải là đơn giản, nếu đọc được thì lại bị lỗi font chữ khi chuyển đổi dữ liệu sang file excel. Tuy nhiên hiện tại thì vấn đề đó không còn phức tạp nữa nếu ta sử dụng PHPExcel API để giải quyết. 

Đây là bài đầu tiên trong loạt bài hướng dẩn sử dụng PHPExcel nên tôi sẽ giới thiệu sơ lược và cuối cùng sẽ làm một ví dụ nhỏ đó là lưu dữ liệu từ mysql vào file excel để người dùng download về. Tuy nhiên để cho tiện lợi thì thay vì lấy dữ liệu từ CSDL thì tôi sẽ tạo một mảng để demo nên rất mong các bạn thông cảm.

1. Điều kiện sử dụng PHPExcel

Để sử dụng được bộ thư viện viết bằng php này thì đòi hỏi cấu hình Server bạn phải như sau:

  • PHP version 5.2.0 hoặc mới hơn
  • PHP extension php_zip enabled [^phpzip_footnote]
  • PHP extension php_xml enabled
  • PHP extension php_gd2 enabled (if not compiled in)

2. Cấu hình sử dụng PHPExcel

Trước khi sử dụng nó bạn phải download bộ thư viện từ trang chủ PHPExcel. Trong bộ thư viện này có rất nhiều file, nhưng file chủ yếu đóng vai trò khởi động toàn bộ thư viện đó là file PHPExcel.php, nên để sử dụng được thì bạn chỉ cần require file PHPExcel.php.

Cách đơn giản nhất để học bộ thư viện này là bạn đọc phần ví dụ của nó, thực tế bạn có thể đọc mà không cần xem tuts của tôi, nhưng nếu tiếng anh bạn không rành và khả năng debug của bạn không tốt thì có thể tham khảo serie này để dễ dàng nắm bắt hơn.

3. Lấy dữ liệu từ mysql lưu vào file excel với PHPExcel

Note: Như phần đầu tôi có trình bày, vì tôi không muốn rườm rà nên tôi sẽ sử dụng mảng coi như là dữ liệu từ mysql.

Tổng cộng chúng ta có 9 bước để thực hiện, vì sự rườm rà của code nên tôi sẽ comment trong file demo luôn nên các bạn vui lòng đọc phần comment nhé. Bây giờ bạn tạo file download.php và copy nội dung này vào:

<?php

// Bước 1: 
// Lấy dữ liệu từ database
$data = array(
    array(
        'TheHalfheart@gmail.com', 'Nguyễn Văn Cường'
    ),
    array(
        'freetuts.net@gmail.com', 'Nguyễn Văn Cường'
    ),
    array(
        'mrcuong.winter@gmail.com', 'Nguyễn Văn Cường'
    ),
    array(
        'ok_drt@yahoo.com', 'Nguyễn Văn Cường'
    )
);

// Bước 2: Import thư viện phpexcel
require '../PHPExcel.php';

// Bước 3: Khởi tạo đối tượng mới và xử lý
$PHPExcel = new PHPExcel();

// Bước 4: Chọn sheet - sheet bắt đầu từ 0
$PHPExcel->setActiveSheetIndex(0);

// Bước 5: Tạo tiêu đề cho sheet hiện tại
$PHPExcel->getActiveSheet()->setTitle('Email List');

// Bước 6: Tạo tiêu đề cho từng cell excel, 
// Các cell của từng row bắt đầu từ A1 B1 C1 ...
$PHPExcel->getActiveSheet()->setCellValue('A1', 'STT');
$PHPExcel->getActiveSheet()->setCellValue('B1', 'Email');
$PHPExcel->getActiveSheet()->setCellValue('C1', 'Fullname');

// Bước 7: Lặp data và gán vào file
// Vì row đầu tiên là tiêu đề rồi nên những row tiếp theo bắt đầu từ 2
$rowNumber = 2;
foreach ($data as $index => $item) 
{
    // A1, A2, A3, ...
    $PHPExcel->getActiveSheet()->setCellValue('A' . $rowNumber, ($index + 1));
    
    // B1, B2, B3, ...
    $PHPExcel->getActiveSheet()->setCellValue('B' . $rowNumber, $item[0]);

    // C1, C2, C3, ...
    $PHPExcel->getActiveSheet()->setCellValue('C' . $rowNumber, $item[1]);
    
    // Tăng row lên để khỏi bị lưu đè
    $rowNumber++;
}

// Bước 8: Khởi tạo đối tượng Writer
$objWriter = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel5');

// Bước 9: Trả file về cho client download
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="bai-01-demo-excel-freetuts.net.xls"');
header('Cache-Control: max-age=0');
if (isset($objWriter)) {
    $objWriter->save('php://output');
}

Chạy file này lên thì bạn sẽ nhận một file excel với dữ liệu trong mysql như ở bước 1. 

4. Lời kết

Bài này có hạn chế là vì tôi lười lấy dữ liệu từ mysql để gắn vào file excel nên tôi sử dụng mảng để thay thế, tuy nhiên tôi nghĩ nếu bạn đang đọc bài này thì điều này đơn giản đối với bạn.

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.