denisok94 / symfony-export-xlsx
Symfony 导出 Excel(.xlsx)
0.0.7
2023-09-05 11:55 UTC
Requires
- denisok94/helper-composer: ^0.0.7
- phpoffice/phpspreadsheet: ^1.23
README
主思想来源于 XlsxWriter.php.
除了
- PHPOffice\PHPExcel 已被 PHPOffice\PhpSpreadsheet 替换;
- 该类被用作服务,以便在任何地方使用它并进行文件更改。
安装
运行
composer require --prefer-dist denisok94/symfony-export-xlsx
# or
php composer.phar require --prefer-dist denisok94/symfony-export-xlsx
或将以下内容添加到您的 composer.json
文件的 require
部分:
"denisok94/symfony-export-xlsx": "*"
composer update
# or
php composer.phar update
使用服务
namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use \Denisok94\SymfonyExportXlsxBundle\Service\XlsxService; class ExportController extends AbstractController { /** @var XlsxService */ private $export; /** * @param XlsxService $export */ public function __construct(XlsxService $export) { $this->export = $export; } /** * @return Response */ public function index(): Response { $fileName = 'my_first_excel.xlsx'; $temp_file = tempnam(sys_get_temp_dir(), $fileName); $this->export->setFile($temp_file)->open(); $test = [ ['header1' => 'value1', 'header2' => 'value2', 'header3' => 'value3'], ['header1' => 'value4', 'header2' => 'value5', 'header3' => 'value6'] ]; foreach ($test as $line) { $this->export->write($line); } $this->export->close(); return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE); } }
自定义
use \Denisok94\SymfonyExportXlsxBundle\Service\XlsxService; /** @var XlsxService */ private $export; /** * @param XlsxService $export */ public function __construct(XlsxService $export) { $this->export = $export; } /** * @return Response */ public function index(): Response { $fileName = 'my_first_excel.xlsx'; $temp_file = tempnam(sys_get_temp_dir(), $fileName); $this->export->setFile($temp_file)->open(); // $this->export->getProperties() ->setCreator('Denis') ->setLastModifiedBy('Denis') ->setSubject('my_first_excel') ->setTitle('my_first_excel'); $test = [ ['header1' => 'value1', 'header2' => 'value2', 'header3' => 'value3'], ['header1' => '4', 'header2' => '5', 'header3' => '=A3+B3'] ]; // header1 (A1) / header2 (B1) / header3 (C1) // value1 (A2) / value2 (B2) / value3 (C2) // 4 (A3) / 5 (B3) / =A3+B3 (C3) foreach ($test as $line) { $this->export->write($line); } // https://phpoffice.github.io/PhpSpreadsheet/classes/PhpOffice-PhpSpreadsheet-Worksheet-Worksheet.html#method_mergeCells $this->export->getActiveSheet()->mergeCells('B2:C2'); // https://phpoffice.github.io/PhpSpreadsheet/classes/PhpOffice-PhpSpreadsheet-Style-Borders.html $this->export->getActiveSheet() ->getStyle('A2:C3')->getBorders()->applyFromArray(['allBorders' => ['borderStyle' => 'thin', 'color' => ['rgb' => '000000']]]); // https://phpoffice.github.io/PhpSpreadsheet/classes/PhpOffice-PhpSpreadsheet-Style-Color.html $this->export->getActiveSheet() ->getStyle('C3')->getFont()->getColor()->applyFromArray(['rgb' => 'FF0000FF']); $this->export->close(); return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE); }
在 SonataAdmin 导出中使用
如果缺少 SonataExporterBundle
则安装
composer require sonata-project/exporter
最低版本 doctrine/orm
: 2.8
在 config
中添加
# ~config/packages/sonata_exporter.yaml services: sonata.exporter.writer.xlsx: class: Denisok94\SymfonyExportXlsxBundle\Writer\XlsxWriter arguments: ["php://output"] tags: - { name: sonata.exporter.writer }
在 YourAdmin
类中添加 根据文档
public function getExportFormats(): array { return ['xlsx']; }
如果您需要配置字段及其翻译
protected function configureExportFields(): array { // example: return [ $this->trans('export.title') => 'title', $this->trans('export.anons') => 'text', $this->trans('export.date') => 'date' ]; }
错误
如果您看到错误
Attempted to call an undefined method named "toIterable" of class "Doctrine\ORM\Query"
请确保 doctrine/orm
版本为 2.8
或更高。
您可能需要更新
- sonata-project/admin-bundle: ~
3.*
- sonata-project/doctrine-orm-admin-bundle: ~
3.*
- doctrine/doctrine-bundle: ~
^2.3