【问题标题】:Adding Custom Footer and Header with Laravel Excel Package使用 Laravel Excel 包添加自定义页脚和页眉
【发布时间】:2019-10-09 01:24:35
【问题描述】:

我正在使用 Laravel Excel 3.1 版来生成 CSV/XLS 等。 我必须自定义我的 csv 或 xls 以使自定义页脚和页眉跨越列。

它应该看起来像所附的屏幕截图。

另外,我想将导出的文件存储到存储位置,但无法正常工作。

而我做的代码是:

class ReportExport implements FromArray, WithHeadings
{
    protected $results;

    public function __construct(array $results, array $headings, array $fileAttributes)
    {
        $this->results = $results;
        $this->headings = $headings;
        $this->file_attributes = $fileAttributes;
    }

    /**
     * @return array
     */
    public function array(): array
    {
        return $this->results;
    }

    /**
     * @return array
     */
    public function headings(): array
    {
        return $this->headings;
    }

    public function registerEvents(): array
    {
        return [
            // Handle by a closure.
            BeforeExport::class => function(BeforeExport $event) {
                $event->writer->getProperties()->setTitle('Patrick');
            },
        ];
    }

}

如下调用i:

Excel::store(["1","2"],"xyz.xlsx");

如何将这些额外的行添加到导出的结果中。

【问题讨论】:

    标签: php laravel laravel-excel


    【解决方案1】:

    Laravel Excel - 扩展
    https://docs.laravel-excel.com/3.1/exports/extending.html

    PHP电子表格
    https://phpspreadsheet.readthedocs.io/en/latest/

    还有一些空间可以清理,但这应该会为您提供基础知识。

    public function registerEvents(): array
    {
        return [
            // Handle by a closure.
            AfterSheet::class => function(AfterSheet $event) {
    
                // last column as letter value (e.g., D)
                $last_column = Coordinate::stringFromColumnIndex(count($this->results[0]));
    
                // calculate last row + 1 (total results + header rows + column headings row + new row)
                $last_row = count($this->results) + 2 + 1 + 1;
    
                // set up a style array for cell formatting
                $style_text_center = [
                    'alignment' => [
                        'horizontal' => Alignment::HORIZONTAL_CENTER
                    ]
                ];
    
                // at row 1, insert 2 rows
                $event->sheet->insertNewRowBefore(1, 2);
    
                // merge cells for full-width
                $event->sheet->mergeCells(sprintf('A1:%s1',$last_column));
                $event->sheet->mergeCells(sprintf('A2:%s2',$last_column));
                $event->sheet->mergeCells(sprintf('A%d:%s%d',$last_row,$last_column,$last_row));
    
                // assign cell values
                $event->sheet->setCellValue('A1','Top Triggers Report');
                $event->sheet->setCellValue('A2','SECURITY CLASSIFICATION - UNCLASSIFIED [Generator: Admin]');
                $event->sheet->setCellValue(sprintf('A%d',$last_row),'SECURITY CLASSIFICATION - UNCLASSIFIED [Generated: ...]');
    
                // assign cell styles
                $event->sheet->getStyle('A1:A2')->applyFromArray($style_text_center);
                $event->sheet->getStyle(sprintf('A%d',$last_row))->applyFromArray($style_text_center);
            },
        ];
    }
    

    编辑:基本页面格式
    这里有一些额外的帮助输出格式。这些可以附加到现有的 AfterSheet 事件中。您可能需要针对 PDF 操作的细节提出另一个问题。

    // set columns to autosize
    for ($i = 1; $i <= count($this->results[0]); $i++) {
        $column = Coordinate::stringFromColumnIndex($i);
        $event->sheet->getColumnDimension($column)->setAutoSize(true);
    }
    
    // page formatting (orientation and size)
    $event->sheet->getPageSetup()->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE);
    $event->sheet->getPageSetup()->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_LETTER);
    

    【讨论】:

    • 谢谢@matticustard,这看起来很棒。只是想知道如果我想让它更有活力怎么办,比如我不知道最后一列是 D
    • 我在上面添加了动态列。您可能需要添加检查以验证 $this-&gt;results 是否为空或在导出之前对其进行处理。否则,$this-&gt;results[0] 可能会抛出错误。
    • 谢谢,很好,我也在尝试使用 Laravel Excel 和 Tcpdf 将其导出到 Pdf 中。但是结果非常缩小。有没有办法可以使用整页宽度。
    • 我试过 $event->sheet->getDelegate()->getPageSetup()->setFitToPage(1);但没有任何影响。
    • 我添加了一些基本的页面格式,但我不太确定具体的 PDF 操作。您可能想将此作为另一个问题提出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多