Iterate structured Excel spreadsheets, normalize rows into value objects, validate, serialize into CSV, JSON, XML.
Xezilaires is a PHP library which helps to iterate structured Excel spreadsheets, normalize rows into value objects, validate, serialize into CSV, JSON, XML.
Think of it as an "ORM" (Object Relation Manager) for an Excel file. An OEM (Object Excel Manager), if you will.
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])
);
See more examples in the docs/examples/
folder.
start
, which row do we start on1
)
header
, which row contains the header labelsHeaderReference
, default: null
)
reverse
, do we iterate the rows in reverse, from end to startfalse
)
sequential
, is the key sequential (0, 1, 2) or represents current row?false
)
Features included:
phpoffice/PhpSpreadsheet
or openspout/openspout
)
symfony/serializer
, from / to all supported formats)
PrdctEN
to property product
")
You can use your own normalizers / validators by passing your own Symfony bundle
which registers them to the Xezilaires commands via --bundle
, like so:
vendor/bin/xezilaires validate --bundle Xezilaires\\Test\\ExampleBundle\\XezilairesExampleBundle Xezilaires\\Test\\Model\\Product src/Xezilaires/Test/resources/fixtures/products.xlsx
See example bundle in src/Xezilaires/Test/ExampleBundle/
.
xezilaires
is serializex
backwards.
We added the X so the name so we can shorten it as XLS. As a side-effect, we made reading Excel files with this library cool.