sigwin / xezilaires-dev
遍历结构化Excel电子表格,将行规范化为值对象,验证,序列化为CSV、JSON、XML
1.0.0
2024-01-29 11:45 UTC
Requires
- php: ^8.2
- ext-json: *
- symfony/options-resolver: ^6.4 || ^7.0
- symfony/serializer: ^6.4 || ^7.0
Requires (Dev)
- matthiasnoback/symfony-dependency-injection-test: ^5.0
- nyholm/nsa: ^1.1
- nyholm/symfony-bundle-test: ^3.0
- openspout/openspout: ^4.0
- phpoffice/phpspreadsheet: ^2.0
- phpunit/phpunit: ^10.5
- sigwin/infra: ~1.9.0
- symfony/console: ^6.4 || ^7.0
- symfony/framework-bundle: ^6.4 || ^7.0
- symfony/phpunit-bridge: ^6.4 || ^7.0
- symfony/property-access: ^6.4 || ^7.0
- symfony/property-info: ^6.4 || ^7.0
- symfony/validator: ^6.4 || ^7.0
Suggests
- openspout/openspout: Read Excel files with Spout
- phpoffice/phpspreadsheet: Read Excel files with PhpSpreadsheet
- symfony/console: bin/xezilaires use
- symfony/framework-bundle: Symfony bundle integration, bin/xezilaires use
- symfony/validator: Symfony bundle integration, bin/xezilaires validate use
Replaces
- sigwin/xezilaires-core: 1.0.0
- sigwin/xezilaires-phpspreadsheet: 1.0.0
- sigwin/xezilaires-spout: 1.0.0
- sigwin/xezilaires-symfony: 1.0.0
README
Xezilaires是一个PHP库,可以帮助遍历结构化Excel电子表格,将行规范化为值对象,验证,序列化为CSV、JSON、XML。
它做了什么
- 我们创建一个PHP类来存储我们的Excel行数据
- 接下来创建电子表格迭代器实例
- 传递要读取的Excel文件的路径
- 传递将Excel列映射到PHP属性的配置
- 在迭代过程中,我们为每一行获取一个值对象(定义的类的实例)
将其视为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/PhpSpreadsheet
或openspout/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/
中的示例包。
关于名称的含义
xezilaires
是serializex
的倒序。
我们在名称中添加了X,这样我们就可以将其简写为XLS。作为副作用,我们使使用这个库来读取Excel文件变得酷。