staffim / spreadsheet-builder
一个用于 PhpSpreadsheet 的小型库,通过配置数据列来帮助构建 xlsx 表格
1.1.3
2021-11-09 17:38 UTC
Requires
- php: ^7.2|>=8.0
- ext-dom: *
- ext-json: *
- ext-mbstring: *
- phpoffice/phpspreadsheet: ^1.9
Requires (Dev)
- escapestudios/symfony2-coding-standard: ^3.10
- friendsofphp/php-cs-fixer: ^2.16
- phpunit/phpunit: ^8.5
- roave/security-advisories: dev-master
README
一个用于 PhpSpreadsheet 的小型库,通过配置数据列来帮助构建 xlsx 表格。
安装
composer require staffim/spreadsheet-builder
示例
创建工作表构建器
<?php namespace Acme\Xlsx; use Staffim\SpreadsheetBuilder\AbstractWorksheetBuilder; use PhpOffice\PhpSpreadsheet\Style\Alignment; class UsersListWorksheetBuilder extends AbstractWorksheetBuilder { public function getTableTitle(iterable $data): string { return sprintf('Users list at %s', (new \DateTime())->format('d.m.Y')); } public function getWorksheetTitle(iterable $data): string { return 'Users list'; } protected function getColumnsSettings(iterable $data): array { return [ [ 'title' => 'ID', 'value' => static function (User $user) { return $user->getId(); }, 'width' => 5, ], [ 'title' => 'Email', 'value' => static function (User $user) { return $user->getEmail(); }, 'width' => 20, ], [ 'title' => 'About', 'value' => static function (User $user) { return $user->getAbout(); }, 'width' => 25, 'style' => [// all available phpspreadsheet's styles 'alignment' => [ 'wrapText' => true, 'vertical' => Alignment::VERTICAL_TOP, ], ], ], ]; } }
构建整个电子表格
use Staffim\SpreadsheetBuilder\Builder; /// .... $builder = new Builder([ new \Acme\Xlsx\UsersListWorksheetBuilder(), ]); $users = $usersManager->fetchUsers(); $spreadsheet = $builder->build([$users]);
从模板 xlsx 中构建,带有占位符(本例中将 {title}、{content}、{foo} 占位符替换为 A1:E2 范围内 $data 数组值)
模板之前
$data = [
'title' => 'Test title',
'content' => 'Test content',
'author' => 'Test author',
'foo' => 'Foo',
'bar' => 'Bar',
'date' => '20.02.2002',
];
$builder = new Builder([
new TemplateWorksheetBuilder('/path/from/template.xlsx', 'payment', 'A1:E2'),
]);
$spreadsheet = $builder->build([$data]);
结果之后
与 HTML 一起工作
使用 \Staffim\SpreadsheetBuilder\RichTextToHtmlConverter
将 HTML 转换为 RichText
或反之亦然
$converter = new \Staffim\SpreadsheetBuilder\RichTextToHtmlConverter( [ new BoldConverter(), new ItalicConverter(), new UnderlineConverter(), new ColorConverter(), ] ); }; $html = '<span style="color: brown; font-weight: bold">bold<br/></span> <i style="color: #ffcc01">italic</i><br/> <b style="text-decoration: underline">underline111</b> <span style="font-weight: bold; color: #AA0000">bold red</span>'; $richText = $converter->convertFromHtml($html);
查看更多示例,请参阅 测试