openbyte / spreadsheet-export
v0.1.8
2024-08-16 12:47 UTC
Requires
- php: >=8.1
- doctrine/annotations: ^2.0
- phpoffice/phpspreadsheet: ^1.29|^2.0
- symfony/form: ^6.3|7.0.*|7.1.*
- symfony/http-foundation: ^6.3|7.0.*|7.1.*
- symfony/serializer: ^6.3|7.0.*|7.1.*
Requires (Dev)
- phpstan/phpstan: ^1.10
README
这是一个使用 Symfony Serializer 实现的简单导出库,支持 xlsx、csv 和 odt 格式。可以通过 \Symfony\Component\Serializer\Annotation\Groups
属性标记要导出的属性。
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;
}
}
通过扩展 AbstractSpreadsheetExport
来配置导出。应使用 SpreadsheetBuilder::add
方法添加电子表格的列,第一个参数是属性名,第二个是列标签。
use OpenbyteSpreadsheetExport\AbstractSpreadsheetExport;
class Export extends AbstractSpreadsheetExport
{
protected function buildSpreadsheet(SpreadsheetBuilder $builder, array $options): SpreadsheetBuilder
{
return $builder
->add('familyName', 'Family Name')
->add('firstname', 'Firstname')
;
}
protected function getGroupNames(): array
{
return ["test"];
}
}
可以使用 ExportFormService::saveSpreadsheetToFile
或 ExportFormService::getSpreadsheetAsResponse
来创建导出。以下示例将保存 csv 文件到 /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
);