Một số lớp xuất dữ liệu dạng excel trong PHP

  • PHP and Mysql
  • 26 tháng 12 2012
  • bởi Văn Khương
  • 0 Comments

Khi xây dựng ứng dụng web bạn sẽ có nhu cầu xuất dữ liệu sang một số định dạng để báo cáo hay làm tài liệu lưu trữ khi cần, hoặc với mục đích nhập dữ liệu sang các hệ thống khác. Bạn có thể xây dựng cho mình một lớp xuất dữ liệu để dùng khi cần nhưng trước hết bạn nên tham khảo một số lớp được viết sẵn mà tôi sẽ giới thiệu sau đây.

class xlsStream

Đây là lớp được viết khá hay bằng cách đăng ký một giao thức có thể đọc và ghi dữ liệu với định dạng excel, tác giả thuộc về Ignatius Teo được viết từ năm 2005. Cách sử dụng:

require_once "excel.php";
$export_file = "xlsfile://tmp/example.xls";
$fp = fopen($export_file, "wb");
if (!is_resource($fp)){
    die("Cannot open $export_file");
}
// Dữ liệu ví dụ có thể được lấy từ database
$assoc = array(
    array("name"=>"Khanh","nickname"=>"Kevin"),
    array("name"=>"Vinh","nickname"=>"Jimmy"),
    array("name"=>"Hai","nickname"=>"cute")
);
// Ghi dữ liệu vào tập tin
fwrite($fp, serialize($assoc));
fclose($fp);

Bạn cần chú ý tới giao thức xlsfile:// sau đó đường dẫn nơi tập tin sẽ lưu trữ tính từ đường dẫn gốc trên hệ thống của bạn, đây là lớp viết khá ngắn gọn và giễ dùng nhưng chỉ tiếc là khi tôi thử nghiệm thì nó không thể hiển thị được dữ liệu tiếng Việt. Để xem chi tiết và tải ứng dụng bạn có thể truy cập code.google.com.

class php-export-data

Thỏa mãn nhu cầu dữ liệu tiếng Việt đây là lớp viết ngắn gọn có bố cục rất rõ ràng, mạch lạc, và có thể mở rộng, tác giả thuộc về Eli Dickinson. Sơ qua về cấu trúc của lớp bạn có thể thấy ứng dụng có xây dựng một abstract class với tên ExportData xác định một số thuộc tính và phương thức chính để bạn có thể kế thừa xuất thành nhiều định dạng khác và cũng để khai báo tùy chọn hành động mà bạn muốn như hành động download, lưu trữ, hay không làm gì.

Cách sử dụng

require "php-export-data.class.php";
$excel = new ExportDataExcel('browser');
$excel->filename = "test.xls";
$data = array(
  array(1,2,3),
  array("Ngô Văn Khương","Đinh Hữu Chiến","semi"),
  array("1273623874628374634876","=asdf","10-10"),
  array("2010-01-02 10:00AM","1/1/11","10-10"),
  array("1234","12.34","-123."),
  array("-12345678901234567890","0.0000000000123456789","-"),
);
$excel->initialize();
foreach($data as $row) {
  $excel->addRow($row);
}
$excel->finalize();

Chúng ta có 3 lớp có thể sử dụng là ExportDataExcel để xuất định dạng excel, ExportDataTSV để xuất định dạng TSV, ExportDataCSV để xuất định dạng CSV. Khi khai báo 1 trong 3 lớp trên bạn có 3 tùy chọn tham số là 'browser' để xuất thành tập tin có thể download, 'file' để xuất thành tập tin có thể lưu trữ, và  'string' không làm gì cả. Sau khi tạo giá trị filename bạn có 3 phương thức để sử dụng là initialize(), addRow(), finalize() bạn chú ý để 3 phương thức theo thứ tự trước sau như trên, phương thức addRow() sẽ thêm từng dòng dữ liệu vào tập tin của bạn. Thực chất file excel tạo được là một tập tin xml được định nghĩa để phần mềm office có thể đọc được, và nó cũng đã sét encoding cho ta là UTF-8 nên việc hiển thị tiếng Việt là miễn bàn. Với tùy chọn 'string' bạn có thể dùng thêm phương thức getString() để trả về chuỗi dữ liệu và hiển thị trên trình duyệt. Tải class và demo từ github.com.

class Excel_XML

Đây là ứng dụng làm cơ sở cho ứng dụng xuất thành tập tin excel của Ignatius Teo được giới thiệu ở trên. Lớp được viết khá chặt chẽ, về cơ bản là việc tạo ra một tập tin có cấu trúc xml mà phần mềm office có thể đọc được, bạn cũng có thể xuất nó thành tập tin với phần mở rộng xml hay xls.

Cách sử dụng:

require dirname(__FILE__) . '/php-excel.class.php';
$data = array(
  0 => array('Mr.', 'Văn Khương', 'E-Mail'),
  array(1, 'Oliver Schwarz', 'oliver.schwarz@gmail.com'),
  array(2, 'Hasematzel', 'hasematzel@gmail.com'));
$xls = new Excel_XML;
$xls->addWorksheet('Sheet1', $data);
$xls->addWorksheet('Sheet2', $data);
$xls->sendWorkbook('test.xls');
//$xls->writeWorkbook('test.xml');
//echo $xls->getWorkbook();

Phương thức addWorksheet() có 2 tham số là tên worksheet và dữ liệu, một điểm cộng cho ứng dụng là bạn có thể thêm được nhiều worksheet, phương thức sendWorkbook() sẽ xuất tập tin thành dạng có thể download với tham số là tên tập tin. Để xuất tập tin lưu trữ bạn sẽ dùng đến phương thức writeWorkbook() với tham số thứ nhất là tên tập tin, tham số thứ hai là đường dẫn của tập tin mặc định là để trống. Để trả về một chuỗi bạn sẽ dùng phương thức getWorkbook(). Tải lớp ứng dụng của tác giả từ code.google.com.

Một ứng dụng "hầm hố" khác là ứng dụng PHPexcel phiên bản hiện tại là 1.7.8. Đó là một dự án lớn với rất nhiều tính năng mạnh mẽ chứ không đơn thuần chỉ là xuất dữ liệu dạng excel mà còn thao tác dữ liệu với các tính năng có trên excel. Ứng dụng có tài liệu hướng dẫn và lượng lớn ví dụ, nếu bạn muốn nghiên cứu về nó hãy truy cập codeplex.com.

  • Chia sẻ
comments powered by Disqus