pfurak/xlsx-writer
Composer 安装命令:
composer require pfurak/xlsx-writer
包简介
Easy PHP XLSX Writer that is support cell styling, merged cells, multiple worksheets, images, line chart, bar chart and pie chart, huge rows and rows/columns fixing
关键字:
README 文档
README
Use:
ZipArchive, based on PHP's Zip extension
Simple XLSX output generator
- supports PHP 8.0+
- takes UTF-8 encoded input
- multiple worksheets
- supports cell styling
- supports merged cells
- supports images (png, jpg, jpeg)
- supports charts (Line chart, Bar chart, Pie chart)
- supports writing huge row sheets (Check Huge Data Example)
- supports rows/columns fixing (Check Fixed Row Column Example)
- supports row filtes (Check Filters Example)
- Supports cell width and row height (Check Row Height Column Width Example)
- Supports hyperlinks (Check Hyperlinks Example)
Installation
composer require pfurak/xlsx-writer
Simple PHP CLI example:
use XLSXWriter\Export;
$sheetName = "sheet1";
$maxRow = 3;
$maxCol = 10;
$export = new Export("export.xlsx");
for($row = 0; $row < $maxRow; $row++) {
for($col = 0; $col < $maxCol; $col++) {
$value = $row + $col;
$export->addField($sheetName, $row, $col, $value);
}
}
$export->saveOnDisk(__DIR__);
unset($export);
Simple PHP browser example:
use XLSXWriter\Export;
$sheetName = "sheet1";
$maxRow = 3;
$maxCol = 10;
$export = new Export("export.xlsx");
for($row = 0; $row < $maxRow; $row++) {
for($col = 0; $col < $maxCol; $col++) {
$value = $row + $col;
$export->addField($sheetName, $row, $col, $value);
}
}
$export->download();
unset($export);
Simple style example:
use XLSXWriter\Export;
use XLSXWriter\Fill;
use XLSXWriter\Font;
use XLSXWriter\Border;
$fill = new Fill("solid", ["from" => "string", "value" => "black"]);
$font = new Font([
"size" => 12,
"name" => "Helvetica",
"bold" => true,
"italic" => true,
"underline" => true,
"color" => [
"from" => "hex",
"value" => "6EF0EB"
]
]);
$alignment = [
"horizontal" => "center",
"vertical" => "center",
"wrapText" => "1",
"textRotation" => "90"
];
$borderColor = [
"from" => "rgb",
"value" => [
"red" => 0,
"green" => 125,
"blue" => 125
]
];
$border = new Border([
"left" => [
"style" => "medium",
"color" => $borderColor
],
"diagonal" => [
"style" => "medium",
"color" => $borderColor
],
"diagonalUp" => true,
"diagonalDown" => true,
]);
$style = [
"fill" => $fill,
"font" => $font,
"alignment" => $alignment,
"numberFormat" => "##\%",
"border" => $border
]
$sheetName = "sheet1";
$maxRow = 3;
$maxCol = 10;
$export = new Export("export.xlsx");
for($row = 0; $row < $maxRow; $row++) {
for($col = 0; $col < $maxCol; $col++) {
$value = $row + $col;
$export->addField($sheetName, $row, $col, $value, $style);
}
}
$export->saveOnDisk(__DIR__);
unset($export);
Simple image example:
use XLSXWriter\Export;
$imgDir = "./images/";
$images = [[
"file" => $imgDir . "img.png",
"row" => 0,
"col" => 0
], [
"file" => $imgDir . "img_2.png",
"row" => 0,
"col" => 2
], [
"file" => $imgDir . "img_3.png",
"row" => 0,
"col" => 4
]];
$sheetName = "sheet1";
$export = new Export("export.xlsx");
foreach($images as $image) {
$export->addImage($sheetName, $image['file'], $image['row'], $image['col']);
}
$export->saveOnDisk(__DIR__);
unset($export);
Simple line chart example:
use XLSXWriter\Export;
use XLSXWriter\Chart\LineChart\LineChart;
use XLSXWriter\Chart\LineChart\Line;
$sheetName = "sheet1";
$style = ["numberFormat" => "#,##0.00\ [\$Ft-hu-HU]"];
$EURToHUF = ["EUR TO HUF", 380.71, 381.92, 382.10, 382.56, 378.65];
$USDToHUF = ["USD TO HUF", 362.15, 362.15, 362.15, 365.00, 360.87];
$dates = ["Date", "2022.05.06.", "2022.05.07.", "2022.05.08.", "2022.05.09.", "2022.05.10."];
$data = [$EURToHUF, $USDToHUF, $dates];
$maxRow = count($data);
$export = new Export("export.xlsx");
$chart = new LineChart();
$chart->setTitle("EUR (€) & USD ($) to HUF (Ft)");
$chart->setPosition($maxRow, 0);
$chart->setXAxis($sheetName, $maxRow - 1, 1, count($data[$maxRow - 1]) - 1);
$chart->setShowLegend(true);
$chart->setLegendPosition('b'); // bottom
for($row = 0; $row < $maxRow; $row++) {
$dataRow = $data[$row];
$maxData = count($dataRow);
for($col = 0; $col < $maxData; $col++) {
$value = $dataRow[$col];
$s = $col > 0 && $row < $maxRow - 1 ? $style : [];
$export->addField($sheetName, $row, $col, $value, $s);
}
if($row < $maxRow - 1) {
$line = new Line();
$line->setTitle($sheetName, $row, 0);
$line->setData($sheetName, $row, 1, $maxData - 1);
$chart->addLine($line);
}
}
$export->addChart($sheetName, $chart);
$export->saveOnDisk(__DIR__);
unset($export);
Simple bar chart example:
use XLSXWriter\Export;
use XLSXWriter\Chart\BarChart\BarChart;
use XLSXWriter\Chart\BarChart\Bar;
$sheetName = "sheet1";
$style = ["numberFormat" => "#,##0.00\ [\$Ft-hu-HU]"];
$EURToHUF = ["EUR TO HUF", 380.71, 381.92, 382.10, 382.56, 378.65];
$USDToHUF = ["USD TO HUF", 362.15, 362.15, 362.15, 365.00, 360.87];
$dates = ["Date", "2022.05.06.", "2022.05.07.", "2022.05.08.", "2022.05.09.", "2022.05.10."];
$data = [$EURToHUF, $USDToHUF, $dates];
$maxRow = count($data);
$export = new Export($output);
$chart = new BarChart();
$chart->setTitle("EUR (€) & USD ($) to HUF (Ft)");
$chart->setPosition($maxRow, 0);
$chart->setXAxis($sheetName, $maxRow - 1, 1, count($data[$maxRow - 1]) - 1);
$chart->setShowLegend(true);
$chart->setLegendPosition('r'); // right
for($row = 0; $row < $maxRow; $row++) {
$dataRow = $data[$row];
$maxData = count($dataRow);
for($col = 0; $col < $maxData; $col++) {
$value = $dataRow[$col];
$s = $col > 0 && $row < $maxRow - 1 ? $style : [];
$export->addField($sheetName, $row, $col, $value, $s);
}
if($row < $maxRow - 1) {
$bar = new Bar();
$bar->setTitle($sheetName, $row, 0);
$bar->setData($sheetName, $row, 1, $maxData - 1);
$chart->addBar($bar);
}
}
$export->addChart($sheetName, $chart);
$export->saveOnDisk(__DIR__);
unset($export);
Simple pie chart example:
use XLSXWriter\Export;
use XLSXWriter\Chart\PieChart\PieChart;
$sheetName = "sheet_1";
$legends = ["PHP", "React", "nodeJS", "TypeScript", "vue.js", "next.js"];
$data = [ 45, 40, 35, 30, 25, 20];
$export = new Export($output);
$row = 0;
for($i = 0; $i < count($legends); $i++) {
$col = 0;
$legend = $legends[$i];
$legendData = $data[$i] ?? 0;
$export->addField($sheetName, $row, $col++, $legend);
$export->addField($sheetName, $row, $col, $legendData);
$row++;
}
$chart = new PieChart();
$chart->setTitle("Lovers of the languages");
$chart->setPosition($row, 0);
$chart->setShowLegend(true);
$chart->setLegendPosition('b');
$chart->setLegend($sheetName, 0, $row - 1, 0, 0);
$chart->setPies($sheetName, 0, $row - 1, 1, 1);
$export->addChart($sheetName, $chart);
$sheetName = "sheet_2";
$row = 0;
$col = 0;
foreach($legends as $legend) {
$export->addField($sheetName, $row, $col++, $legend);
}
$row++;
$col = 0;
foreach($data as $legendData) {
$export->addField($sheetName, $row, $col++, $legendData);
}
$row++;
$chart = new PieChart();
$chart->setTitle("Lovers of the languages");
$chart->setPosition($row, 0);
$chart->setShowLegend(true);
$chart->setLegendPosition('r');
$chart->setLegend($sheetName, 0, 0, 0, count($legends) - 1);
$chart->setPies($sheetName, 1, 1, 0, count($data) - 1);
$export->addChart($sheetName, $chart);
$export->saveOnDisk(__DIR__);
unset($export);
Supported Styles
Font
| Key Prop | Default | Description |
|---|---|---|
size | 12 | Font size in PT |
name | Calibri | Font name |
color | Font color (see colors) | |
vertalign | "superscript" or "subscript" | |
bold | false | true or false |
italic | false | true or false |
underline | false | true or false |
strike | false | true or false |
Alignment
| Key Prop | Default | Description |
|---|---|---|
horizontal | left | "left" or "center" or "right" |
vertical | bottom | "top" or "center" or "bottom" |
wrapText | false | true or false |
textRotation | 0 | Integer |
Fill
| Key Prop | Default | Description |
|---|---|---|
pattern | solid | See Supported Fill Pattern Types |
color | Fill color (see colors) |
Supported Fill Pattern Types
nonegray125soliddarkGraymediumGraylightGraygray0625darkHorizontaldarkVerticaldarkDowndarkUpdarkGriddarkTrellislightHorizontallightVerticallightDownlightUplightGridlightTrellis
Border
| Key Prop | Description |
|---|---|
top | [ "style" => See Supported Border Styles, "color" => see colors ] |
bottom | [ "style" => See Supported Border Styles, "color" => see colors ] |
left | [ "style" => See Supported Border Styles, "color" => see colors ] |
right | [ "style" => See Supported Border Styles, "color" => see colors ] |
diagonal | [ "style" => See Supported Border Styles, "color" => see colors ] |
diagonalUp | true or false if diagonal key setted |
diagonalDown | true or false if diagonal key setted |
Supported Border Styles
dashDotDotdashDotdasheddottedhairmediumDashDotDotmediumDashDotmediumDashedmediumslantDashDotthickthin
Number Format
| Key Prop | Description |
|---|---|
numberFormat | Custom Number Format |
![]() |
Color
| Key Prop | Description |
|---|---|
from | string or hex or rgb |
value | string if from is string or hex |
array if from is rgb |
Color Examples
$red = [
"from" => "hex",
"value" => "FF0000"
];
$green = [
"from" => "rgb",
"value" => [
"red" => 0,
"green" => 255,
"blue" => 0
]
];
$blue = [
"from" => "string",
"value" => "blue"
];
Supported Image extensions
- jpg
- jpeg
- png
Supported Charts
- Line chart
- Bar chart
- Pie chart
pfurak/xlsx-writer 适用场景与选型建议
pfurak/xlsx-writer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4.94k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2022 年 05 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「image」 「excel」 「xlsx」 「chart」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 pfurak/xlsx-writer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 pfurak/xlsx-writer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 pfurak/xlsx-writer 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This Symfony bundle integrates PhpSpreadsheet into Symfony using Twig.
Yii2 LightBox image galary widget uses Lightbox v2.10.0 by Lokesh Dhakar
The Yii2 extension uses jQuery jquery.carousel-1.1.min.js and makes image carousel from php array of structure defined.
PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine
Yii2 export extension
PHP Excel Library
统计信息
- 总下载量: 4.94k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 22
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-05-09
