sasedev / phpspreadsheet-bundle
PHPSpreadsheet 的 symfony 封装器
1.0.0
2020-08-25 10:54 UTC
Requires
- php: >=7.2
- myclabs/php-enum: ^1.7
- phpoffice/phpspreadsheet: ^1.14
- symfony/config: ^5.1
- symfony/dependency-injection: ^5.1
- symfony/http-kernel: ^5.1
This package is auto-updated.
Last update: 2024-09-25 20:05:45 UTC
README
为 Symfony 生成电子表格。
这是什么?
这是一个使用 phpoffice/phpspreadsheet 在控制器内部生成或读取电子表格文件的 Symfony 电子表格工厂。
安装
步骤 1: 使用 composer 下载 PhpSpreadsheetBundle
$ composer require sasedev/phpspreadsheet-bundle
Composer 会将包安装到您的项目 vendor 目录。
步骤 2: 启用包
如果 flex 没有为您完成,请在配置中启用包
<?php // config/bundles.php return [ // ... Sasedev\PhpSpreadsheetBundle\SasedevPhpSpreadsheetBundle::class => ['all' => true], // ... ];
使用方法
写入
您可以在表单中使用该类型,就像这样
<?php use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Style\Fill; use Sasedev\PhpSpreadsheetBundle\Factory\WriterType; use Sasedev\PhpSpreadsheetBundle\Factory\PhpSpreadsheetFactory; // ... public function writeExcel($id, Request $request, PhpSpreadsheetFactory $factory) { $Spreadsheet = $factory->createSpreadsheet(); $Spreadsheet->getProperties() ->setCreator('Salah Abdelkader Seif Eddine') ->setTitle('My Excel file') ->setSubject('the subject') ->setDescription('description of the file') ->setKeywords('key1, key2, key3') ->setCategory('classification'); $Spreadsheet->setActiveSheetIndex(0); $Worksheet = $Spreadsheet->getActiveSheet(); $Worksheet->setTitle('Sheet 1'); $rowNum = 1; $colNum = 1; $Worksheet->getCellByColumnAndRow($colNum, $rowNum)->setValue('Col 1'); $colNum ++; $Worksheet->getCellByColumnAndRow($colNum, $rowNum)->setValue('Col 2'); $Worksheet->getStyle(Coordinate::stringFromColumnIndex(1) . $rowNum . ':' . Coordinate::stringFromColumnIndex($colNum) . $rowNum) ->applyFromArray(['font' => ['bold' => true], 'fill' => ['fillType' => Fill::FILL_SOLID, 'color' => [ 'rgb' => '94ccdf']]]); $em = $this->getEntityManager(); $Entities = $em->getRepository(MyEntity::class)->findAll(); foreach ($Entities as $Entity) { $rowNum ++; $colNum = 1; $Worksheet->getCellByColumnAndRow($colNum, $rowNum)->setValueExplicit($Entity->getCol1(), DataType::TYPE_STRING); $colNum ++; $Worksheet->getCellByColumnAndRow($colNum, $rowNum)->setValueExplicit($Entity->getCol2(), DataType::TYPE_STRING); if ($rowNum % 2 == 1) { $Worksheet->getStyle(Coordinate::stringFromColumnIndex(1) . $rowNum . ':' . Coordinate::stringFromColumnIndex($colNum) . $rowNum) ->applyFromArray(['fill' => ['fillType' => Fill::FILL_SOLID, 'color' => ['rgb' => 'd8f1f5']]]); } else { $Worksheet->getStyle(Coordinate::stringFromColumnIndex(1) . $rowNum . ':' . Coordinate::stringFromColumnIndex($colNum) . $rowNum) ->applyFromArray(['fill' => ['fillType' => Fill::FILL_SOLID, 'color' => ['rgb' => 'bfbfbf']]]); } } for ($currentColNum = 1; $currentColNum <= $colNum; $currentColNum ++) { $Worksheet->getColumnDimension(Coordinate::stringFromColumnIndex($currentColNum))->setAutoSize(true); } $writer = $factory->createWriter($Spreadsheet, WriterType::XLSX()); $response = $factory->createStreamedResponse($writer); $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // application/vnd.ms-excel $response->headers->set('Content-Disposition', 'attachment;filename="myfile.xlsx"'); return $response; }
读取
<?php use Sasedev\PhpSpreadsheetBundle\Factory\ReaderType; use Sasedev\PhpSpreadsheetBundle\Factory\PhpSpreadsheetFactory; // ... public function readExcel(Request $request, PhpSpreadsheetFactory $factory) { // ... $ExcelReader = $factory->createReader(ReaderType::XLSX()); $ExcelReader->load('myfile.xlsx'); // ... } // ...
报告问题或功能请求
您可以自由地报告任何问题。如果您有改进的想法,请继续修改并提交拉取请求。