openbyte/spreadsheet-export

电子表格导出库

v0.1.8 2024-08-16 12:47 UTC

This package is auto-updated.

Last update: 2024-09-16 13:00:52 UTC


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::saveSpreadsheetToFileExportFormService::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
);