staffim/spreadsheet-builder

一个用于 PhpSpreadsheet 的小型库,通过配置数据列来帮助构建 xlsx 表格

1.1.3 2021-11-09 17:38 UTC

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 数组值)

模板之前

Template Before


$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]);

结果之后

Template After

与 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);

查看更多示例,请参阅 测试