openbyte / spreadsheet-export
Spreadsheet export library
v0.1.5
2024-04-05 12:08 UTC
Requires
- php: >=8.1
- doctrine/annotations: ^2.0
- phpoffice/phpspreadsheet: ^1.29|^2.0
- symfony/form: ^6.3|7.0.*
- symfony/http-foundation: ^6.3|7.0.*
- symfony/serializer: ^6.3|7.0.*
Requires (Dev)
- phpstan/phpstan: ^1.10
README
This is an easy export library for xlsx, csv and odt formats using Symfony Serializer. Properties to export can be marked using the \Symfony\Component\Serializer\Annotation\Groups
attribute.
use \Symfony\Component\Serializer\Annotation\Groups;
class User
{
#[Groups("test")]
private string $familyName;
#[Groups("test")]
private string $firstname;
public function getFamilyName(): string
{
return $this->familyName;
}
public function getFirstname(): string
{
return $this->firstname;
}
}
The export is configured by extending the AbstractSpreadsheetExport
. The SpreadsheetBuilder::add
method should be used to add columns of the spreadsheet providing in the first argument the property name and in the second the column label.
use OpenbyteSpreadsheetExport\AbstractSpreadsheetExport;
class Export extends AbstractSpreadsheetExport
{
protected function buildSpreadsheet(SpreadsheetBuilder $builder): SpreadsheetBuilder
{
return $builder
->add('familyName', 'Family Name')
->add('firstname', 'Firstname')
;
}
protected function getGroupNames(): array
{
return ["test"];
}
}
Using the ExportFormService::saveSpreadsheetToFile
or ExportFormService::getSpreadsheetAsResponse
can be used to create the export. The following example will save a csv file to /tmp/my-csv-export.csv
:
use \OpenbyteSpreadsheetExport\ExportFormService;
$listOfUsers = [];
$user = new User();
$user->setFamilyName("John");
$user->setFirstname("Doe");
$listOfUsers[] = $user;
$user = new User();
$user->setFamilyName("Alice");
$user->setFirstname("Doe");
$listOfUsers[] = $user;
$export = new ExportFormService();
$absoluteOsFilePathFolder = '/tmp'
$filenameWithoutExtension = "my-csv-export"
$export->saveSpreadsheetToFile(
$listOfUsers,
SpreadsheetExportFormat::CsvFormat,
(new Export()),
$absoluteOsFilePathFolder,
$filenameWithoutExtension
);