level51/silverstripe-excel-export

用于Excel导出的GridField按钮

安装次数: 1,744

依赖关系: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 6

开放问题: 1

类型:silverstripe-vendormodule

2.0.0 2024-04-04 00:00 UTC

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
                    );
                }
            }

        }

维护者