sigwin/xezilaires-dev

遍历结构化Excel电子表格,将行规范化为值对象,验证,序列化为CSV、JSON、XML

1.0.0 2024-01-29 11:45 UTC

This package is auto-updated.

Last update: 2024-09-24 15:25:18 UTC


README

Xezilaires是一个PHP库,可以帮助遍历结构化Excel电子表格,将行规范化为值对象,验证,序列化为CSV、JSON、XML。

Latest Stable Version Actions Status PHPStan enabled Psalm enabled

它做了什么

  1. 我们创建一个PHP类来存储我们的Excel行数据
  2. 接下来创建电子表格迭代器实例
    1. 传递要读取的Excel文件的路径
    2. 传递将Excel列映射到PHP属性的配置
  3. 在迭代过程中,我们为每一行获取一个值对象(定义的类的实例)

将其视为Excel文件的"ORM"(对象关系管理器)。或者说是一个OEM(对象电子管理器)。

示例用法

无属性

class Product
{
    private $name;
}

$symfonySerializer = new \Symfony\Component\Serializer\Serializer([
    new \Symfony\Component\Serializer\Normalizer\PropertyNormalizer(),
]);
$normalizer = new \Xezilaires\Bridge\Symfony\Serializer\ObjectSerializer($symfonySerializer);
$iteratorFactory = new \Xezilaires\SpreadsheetIteratorFactory($normalizer, [
    \Xezilaires\Bridge\PhpSpreadsheet\Spreadsheet::class,
]);

$iterator = $iteratorFactory->fromFile(
    // https://github.com/sigwinhq/xezilaires-dev/raw/master/src/Xezilaires/Test/resources/fixtures/products.xlsx
    new \SplFileObject(__DIR__.'/../../src/Xezilaires/Test/resources/fixtures/products.xlsx'),
    new \Xezilaires\Metadata\Mapping(
        Model\Product::class,
        [
            'name' => new \Xezilaires\Metadata\ColumnReference('A'),
        ],
        [
            // options
            'start' => 2,
        ]
    )
);

有属性

use Xezilaires\Attribute as XLS;


#[XLS\Options(header=1, start=2)]
class Product
{
    #[@XLS\HeaderReference(header="Name")]
    private $name;
}

$symfonySerializer = new \Symfony\Component\Serializer\Serializer([
    new \Symfony\Component\Serializer\Normalizer\PropertyNormalizer(),
]);
$normalizer = new \Xezilaires\Bridge\Symfony\Serializer\ObjectSerializer($symfonySerializer);
$iteratorFactory = new \Xezilaires\SpreadsheetIteratorFactory($normalizer, [
    \Xezilaires\Bridge\PhpSpreadsheet\Spreadsheet::class,
]);
$attributeDriver = new \Xezilaires\Metadata\Attribute\AttributeDriver();

$iterator = $iteratorFactory->fromFile(
    // https://github.com/sigwinhq/xezilaires-dev/raw/master/src/Xezilaires/Test/resources/fixtures/products.xlsx
    new \SplFileObject(__DIR__.'/../../src/Xezilaires/Test/resources/fixtures/products.xlsx'),
    $attributeDriver->getMetadataMapping(Product::class, ['reverse' => true])
);

更多示例请参阅docs/examples/文件夹。

选项

  • start,从哪一行开始
    (整数,可选,默认:1)
  • header,包含标题标签的行
    (整数,可选,如果不使用HeaderReference,默认:null)
  • reverse,是否从末尾到开头遍历行
    (布尔值,可选,默认:false)
  • sequential,键是顺序的(0,1,2)还是代表当前行?
    (布尔值,可选,默认:false)

功能

包含的功能

  • 读取Excel文件
    (使用phpoffice/PhpSpreadsheetopenspout/openspout)
  • 去规范化/规范化支持
    (使用symfony/serializer,从/到所有支持格式)
  • 属性支持
  • 通过列名标题标签映射
    (例如,"将标题标签PrdctEN映射到属性product")
  • Symfony包
    (便于集成到现有应用程序中)
  • CLI工具(命令行界面)

自定义规范化器/验证器

您可以通过传递自己的Symfony包(该包通过--bundle注册到Xezilaires命令中)来使用自己的规范化器/验证器

vendor/bin/xezilaires validate --bundle Xezilaires\\Test\\ExampleBundle\\XezilairesExampleBundle Xezilaires\\Test\\Model\\Product src/Xezilaires/Test/resources/fixtures/products.xlsx 

请参阅src/Xezilaires/Test/ExampleBundle/中的示例包。

关于名称的含义

xezilairesserializex的倒序。

我们在名称中添加了X,这样我们就可以将其简写为XLS。作为副作用,我们使使用这个库来读取Excel文件变得酷