level51 / silverstripe-excel-export
用于Excel导出的GridField按钮
2.0.0
2024-04-04 00:00 UTC
Requires
- php: ^8.1
- phpoffice/phpspreadsheet: ^2.0
- silverstripe/framework: ^5.0
This package is auto-updated.
Last update: 2024-09-04 10:54:12 UTC
README
类似于默认的GridFieldExportButton,但导出Excel (xlsx) 文件而不是CSV。
兼容性
如何使用
样式化导出的xlsx文件
您可以使用回调函数来挂钩并样式化准备导出的Excel文件。
$excelExportButton = new GridFieldExcelExportButton('buttons-before-left', $exportFieldMapping); $excelExportButton->setAfterExportCallback([ExcelStylingHelper::class, 'styleExcelExport']);
回调函数传递一个PhpOffice\PhpSpreadsheet\Writer\BaseWriter的子类(例如,Xlsx写入对象),在那里您可以获取电子表格和工作表并对其进行操作。查看PHPSpreadsheet文档以获取更多详细信息。
设置默认字体
class ExcelStylingHelper { public static function styleExcelExport(BaseWriter $writer): void { $sheet = $writer->getSpreadsheet(); $sheet->getDefaultStyle()->getFont()->setName('Comic Sans MS'); $sheet->getDefaultStyle()->getFont()->setSize(12); } }
在导出的数据周围绘制边框
并在标题和数据之间绘制更粗的线条
/** @var Worksheet $worksheet */ $worksheet = $sheet->getActiveSheet(); $borders = [ 'borders' => [ 'allBorders' => [ 'borderStyle' => Border::BORDER_MEDIUM, 'color' => ['argb' => 'FF000000'] ] ] ]; $bottomRight = $worksheet->getHighestColumn() . $worksheet->getHighestRow(); $worksheet->getStyle('A1:' . $bottomRight)->applyFromArray($borders); $worksheet->getStyle('A1:' . $worksheet->getHighestColumn() . '1')->applyFromArray( [ 'borders' => [ 'bottom' => [ 'borderStyle' => Border::BORDER_THICK, 'color' => ['argb' => 'FF000000'] ] ] ] );
样式化特定列
有时,例如电话号码显示为科学记数。在这种情况下,您需要将内容格式化为文本。
在此示例中,我们检查标题行中的特定列名为“Tel”并显式地将此列中的每个单元格格式化为文本。
$headerRow = $worksheet->getRowIterator(1, 1)->current(); foreach ($headerRow->getCellIterator() as $headerCell) { //check if header cell is "Tel" if ($headerCell->getValue() === 'Tel') { //format column as text $column = $headerCell->getColumn(); $worksheet->getStyle($column . ':' . $column) ->getNumberFormat() ->setFormatCode(NumberFormat::FORMAT_TEXT); $column = $worksheet->getColumnIterator($column, $column)->current(); foreach ($column->getCellIterator() as $valueCell) { $valueCell->setValueExplicit( $valueCell->getValue(), DataType::TYPE_STRING ); } } }
维护者
- Daniel Kliemsch dk@lvl51.de
- Julian Scheuchenzuber js@lvl51.de