Добавление пользовательского нижнего колонтитула и верхнего колонтитула с пакетом Laravel Excel - PullRequest
0 голосов
/ 09 октября 2019

Я использую Laravel Excel версии 3.1 для генерации CSV / XLS и т. Д. Я должен настроить свой csv или xls так, чтобы пользовательский нижний колонтитул и заголовок охватывали столбцы.

Это должно выглядеть, как на скриншоте, прикрепленном.

Expected output

Кроме того, я хочу сохранить экспортированный файл в хранилище, но не могу заставить его работать.

И код Iсделано:

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

Как добавить эти дополнительные строки в мои экспортированные результаты.

1 Ответ

1 голос
/ 09 октября 2019

Laravel Excel - Расширение
https://docs.laravel -excel.com / 3.1 / exports / extending.html

Таблица PHPS
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);
...