Giới thiệu. PHPSpreadsheet là một thư viện được viết bằng PHP giúp đọc và ghi vào các loại định dạng tệp bảng tính khác nhau với sự trợ giúp của một tập hợp các lớp nhất định. Các định dạng khác nhau hỗ trợ bảng tính là Excel [. xlsx], Định dạng Tài liệu Mở[. ods],Bảng tínhML[. xml], CSV và nhiều hơn nữa
Spreadsheet_Excel_Writer là công cụ tạo file Excel không cần thành phần COM. Các tệp được tạo bởi phiên bản hiện tại của Spreadsheet_Excel_Writer tương ứng với định dạng Excel 5 [BIFF5], do đó, tất cả các chức năng cho đến phiên bản Excel đó [nhưng không vượt quá] sẽ khả dụng
Việc sử dụng phổ biến nhất đối với Spreadsheet_Excel_Writer sẽ tạo ra lượng thông tin lớn [hoặc không quá lớn] ở dạng bảng tính, dễ thao tác với chương trình bảng tính khá phổ biến như Excel [hoặc OpenOffice]
Vì vậy, hãy bắt đầu cuộc rượt đuổi và xem điều này được thực hiện như thế nào
require_once 'Spreadsheet/Excel/Writer.php';
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer[];
// sending HTTP headers
$workbook->send['test.xls'];
// Creating a worksheet
$worksheet =& $workbook->addWorksheet['My first worksheet'];
________số 8_______
// Let's send the file
$workbook->close[];
?>
Điều đầu tiên bạn cần chú ý là chúng tôi đã tạo một sổ làm việc trước bất kỳ trang tính nào. Tất cả các trang tính được chứa trong một sổ làm việc và một sổ làm việc có thể chứa một số trang tính
Một điều quan trọng khác mà bạn nên ghi nhớ khi lập trình với Bảng tính_Excel_Writer, đó là dấu và [&] xuất hiện khi chúng ta tạo trang tính của mình. Dấu và có nghĩa là chúng ta đang tham chiếu một đối tượng Worksheet thay vì sao chép nó. Nếu bạn không biết điều đó có nghĩa là gì, đừng lo lắng, tất cả những gì bạn phải nhớ là luôn sử dụng ký hiệu và khi gọi addWorksheet[] để tạo trang tính hoặc addFormat[] để tạo định dạng
Bạn cũng có thể nhận thấy dòng sau
// gửi tiêu đề HTTP
$workbook->send['kiểm tra. xls'];
Điều đó có nghĩa là chúng tôi đang gửi bảng tính của mình tới một trình duyệt. Nhưng nếu chúng ta chỉ muốn lưu bảng tính trong máy của mình thì sao?
Ví dụ: nếu chúng tôi muốn lưu cùng một bảng tính mà chúng tôi đã tạo trong ví dụ đầu tiên vào một tệp có tên 'kiểm tra. xls', chúng tôi sẽ làm như vậy
require_once 'Spreadsheet/Excel/Writer.php';
// We give the path to our file here
$workbook = new Spreadsheet_Excel_Writer['test.xls'];
$worksheet =& $workbook->addWorksheet['My first worksheet'];
$worksheet->write[0, 0, 'Name'];
$worksheet->write[0, 1, 'Age'];
$worksheet->write[1, 0, 'John Smith'];
$worksheet->write[1, 1, 30];
$worksheet->write[2, 0, 'Johann Schmidt'];
$worksheet->write[2, 1, 31];
$worksheet->write[3, 0, 'Juan Herrera'];
$worksheet->write[3, 1, 32];
// Creating a workbook
0
$workbook = new Spreadsheet_Excel_Writer[];
Nếu bạn muốn tìm hiểu về định dạng [phông chữ, màu ô, căn chỉnh văn bản, v.v. ] với Spreadsheet_Excel_Writer, bạn có thể xem hướng dẫn định dạng tại đây
Bằng cách nào đó, tôi đã xoay sở để đạt được điều này trước khi ai đó thực sự yêu cầu tạo tài liệu Excel thay vì tệp CSV để tài liệu có thể chứa dữ liệu trên nhiều "tab" [trang tính]. Để đạt được điều này, tôi sẽ sử dụng PhpSpreadsheet, một thư viện được viết bằng PHP thuần cung cấp một tập hợp các lớp cho phép bạn đọc và viết các định dạng tệp bảng tính khác nhau, bao gồm định dạng xlsx
Cài đặt
Điều đầu tiên chúng ta cần làm là cài đặt gói PHPSpreadsheet
composer require phpoffice/phpspreadsheet
Cài đặt tiện ích mở rộng cần thiết
Thật không may, gói này yêu cầu một số tiện ích mở rộng PHP. Nếu bạn đang sử dụng PHP 8. 0 trên Ubuntu20. 04, sau đó bạn có thể cài đặt chúng với
sudo apt update \
&& sudo apt install -y php8.0-gd php8.0-zip php8.0-mbstring php8.0-xml
Điều này sẽ yêu cầu tiện ích mở rộng GD cho PHP. Nếu chạy PHP 8. 0 trên Ubuntu, sau đó bạn có thể cài đặt nó với sudo apt install php8.0-gd -y
Mã ví dụ
Dưới đây là một số mã ví dụ sẽ viết ra hai lô dữ liệu hai chiều vào hai trang tính riêng biệt có tên là "Trang tính 1" và "Trang tính 2"
removeSheetByIndex[0];
// Create "Sheet 1" tab as the first worksheet.
// //phpspreadsheet.readthedocs.io/en/latest/topics/worksheets/adding-a-new-worksheet
$worksheet1 = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet[$mySpreadsheet, "Sheet 1"];
$mySpreadsheet->addSheet[$worksheet1, 0];
// Create "Sheet 2" tab as the second worksheet.
$worksheet2 = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet[$mySpreadsheet, "Sheet 2"];
$mySpreadsheet->addSheet[$worksheet2, 1];
// sheet 1 contains the birthdays of famous people.
$sheet1Data = [
["First Name", "Last Name", "Date of Birth"],
['Britney', "Spears", "02-12-1981"],
['Michael', "Jackson", "29-08-1958"],
['Christina', "Aguilera", "18-12-1980"],
];
// Sheet 2 contains list of ferrari cars and when they were manufactured.
$sheet2Data = [
["Model", "Production Year Start", "Production Year End"],
["308 GTB", 1975, 1985],
["360 Spider", 1999, 2004],
["488 GTB", 2015, 2020],
];
$worksheet1->fromArray[$sheet1Data];
$worksheet2->fromArray[$sheet2Data];
// Change the widths of the columns to be appropriately large for the content in them.
// //stackoverflow.com/questions/62203260/php-spreadsheet-cant-find-the-function-to-auto-size-column-width
$worksheets = [$worksheet1, $worksheet2];
foreach [$worksheets as $worksheet]
{
foreach [$worksheet->getColumnIterator[] as $column]
{
$worksheet->getColumnDimension[$column->getColumnIndex[]]->setAutoSize[true];
}
}
// Save to file.
$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx[$mySpreadsheet];
$writer->save['output.xlsx'];
Chuyển đổi định dạng dữ liệu mảng
Nếu bạn giống tôi, thay vào đó, bạn có thể có dữ liệu của mình ở định dạng mảng kết hợp, như vậy
$sheet1Data = [
[
"First Name" => "Britney",
"Last Name" => "Spears",
"Date of Birth" => "02-12-1981"
],
[
"First Name" => "Michael",
"Last Name" => "Jackson",
"Date of Birth" => "29-08-1958"
],
[
"First Name" => "Christina",
"Last Name" => "Aguilera",
"Date of Birth" => "18-12-1980"
],
];
Đây là định dạng bạn sẽ nhận được nếu thực hiện lệnh gọi mysqli_fetch_all
Để chuyển đổi nó sang kiểu "phẳng" cho bảng tính, bạn có thể sử dụng chức năng chuyển đổi sau [mà tôi đã sử dụng cho bài đăng của mình về cách tạo biểu đồ Google]