Khi làm việc với các ứng dụng web, việc lưu trữ và xử lý dữ liệu không thể thiếu. Một trong những định dạng phổ biến để lưu trữ và chia sẻ dữ liệu là Excel. Trong bài viết này, chúng ta sẽ tìm hiểu cách viết một lớp (class) để thao tác với file Excel trong PHP. Bài viết không chỉ hướng dẫn cách đọc và ghi các file Excel, mà còn đề cập đến cách sử dụng thư viện PHP phổ biến như PhpSpreadsheet, giúp bạn thực hiện điều này một cách hiệu quả.
Giới thiệu về PhpSpreadsheet
Trước khi bắt đầu viết lớp thao tác file Excel, cần lưu ý rằng PHP không hỗ trợ trực tiếp việc đọc hoặc ghi file Excel. Tuy nhiên, có nhiều thư viện đã được phát triển để giải quyết vấn đề này, trong đó PhpSpreadsheet là một lựa chọn phổ biến và mạnh mẽ. PhpSpreadsheet là một thư viện PHP cho phép bạn đọc và ghi file Excel, tương thích với định dạng XLSX, XLS, CSV và nhiều định dạng khác.
Cài đặt PhpSpreadsheet
Để sử dụng PhpSpreadsheet, bạn có thể cài đặt nó qua Composer. Nếu bạn chưa cài đặt Composer trên máy tính của mình, hãy làm theo hướng dẫn cài đặt tại trang chính thức của Composer.
Khi đã cài đặt Composer, bạn có thể dễ dàng cài đặt PhpSpreadsheet bằng lệnh sau trong terminal:
composer require phpoffice/phpspreadsheet
Viết lớp thao tác file Excel
Bây giờ, chúng ta sẽ tiến hành viết lớp để quản lý việc đọc và ghi file Excel. Lớp này sẽ bao gồm các phương thức để tạo mới, đọc và ghi dữ liệu vào file Excel.
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class ExcelHandler {
private $spreadsheet;
public function __construct() {
$this->spreadsheet = new Spreadsheet();
}
public function createSheet($data, $sheetTitle = 'Sheet1') {
$sheet = $this->spreadsheet->getActiveSheet();
$sheet->setTitle($sheetTitle);
$row = 1;
foreach ($data as $dataRow) {
$column = 'A';
foreach ($dataRow as $cellValue) {
$sheet->setCellValue($column . $row, $cellValue);
$column++;
}
$row++;
}
}
public function save($fileName) {
$writer = new Xlsx($this->spreadsheet);
$writer->save($fileName);
}
public function load($fileName) {
$this->spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($fileName);
}
public function readSheet($sheetIndex = 0) {
$sheet = $this->spreadsheet->getSheet($sheetIndex);
return $sheet->toArray();
}
}
?>
Phân tích mã nguồn
Trong đoạn mã trên, chúng ta đã định nghĩa lớp ExcelHandler
với các phương thức chính để thao tác với file Excel.
- Khởi tạo lớp: Trong phương thức khởi tạo (
__construct
), chúng ta khởi tạo một đối tượngSpreadsheet
. - Tạo sheet: Phương thức
createSheet
nhận một mảng dữ liệu và tạo một sheet với tiêu đề tùy chọn. Dữ liệu được chèn vào từng ô trong sheet. - Lưu file: Phương thức
save
dùng để lưu file Excel với tên được chỉ định. - Tải file: Phương thức
load
cho phép chúng ta tải một file Excel có sẵn. - Đọc sheet: Phương thức
readSheet
trả về dữ liệu dưới dạng mảng từ sheet đã chỉ định.
Ví dụ sử dụng lớp ExcelHandler
Bây giờ chúng ta sẽ xem xét một ví dụ cơ bản về cách sử dụng lớp ExcelHandler
mà chúng ta đã định nghĩa.
<?php
require 'ExcelHandler.php';
$data = [
['Name', 'Age', 'Email'],
['John Doe', 28, 'john@example.com'],
['Jane Smith', 34, 'jane@example.com'],
];
// Tạo và lưu file Excel
$excelHandler = new ExcelHandler();
$excelHandler->createSheet($data);
$excelHandler->save('example.xlsx');
// Tải và đọc file Excel
$excelHandler->load('example.xlsx');
$readData = $excelHandler->readSheet();
print_r($readData);
?>
Kết quả
Khi chạy đoạn mã trên, bạn sẽ thấy một file có tên example.xlsx
được tạo ra trong thư mục hiện tại. File này chứa bảng dữ liệu mà bạn đã cung cấp. Sau đó, bạn cũng có thể tải lại file và in nội dung của nó ra màn hình, và bạn sẽ thấy rằng dữ liệu đã được lưu thành công.
Kết luận
Bài viết trên đã hướng dẫn bạn cách viết một lớp đơn giản để thao tác file Excel trong PHP bằng cách sử dụng thư viện PhpSpreadsheet. Bạn có thể mở rộng lớp này để bổ sung thêm các tính năng như định dạng ô, thêm biểu đồ, hoặc xử lý dữ liệu phức tạp hơn tùy theo nhu cầu của bạn. Hy vọng rằng hướng dẫn này sẽ giúp bạn trong việc phát triển ứng dụng của mình.
Comments