Я думаю, что я должен поделиться своими решениями здесь давно, но мне жаль, если мои объяснения не достаточно хороши, надеюсь, вы поймете, что я пытаюсь объяснить здесь.
Во-первых, вам нужно создать нового провайдера с именем PHPExcelMacroServiceProvider
в App\Providers\
, в который вы поместите все макросы, необходимые для создания файлов Excel, и вот как это выглядит в моем файле провайдера:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
Use \Maatwebsite\Excel\Sheet;
use \Maatwebsite\Excel\Writer;
class PHPExcelMacroServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
/**
* Page format macros
*/
Writer::macro('setCreator', function (Writer $writer, string $creator) {
$writer->getDelegate()->getProperties()->setCreator($creator);
});
Sheet::macro('setOrientation', function (Sheet $sheet, $orientation) {
$sheet->getDelegate()->getPageSetup()->setOrientation($orientation);
});
/**
* Cell macros
*/
Writer::macro('setCellValue', function (Writer $writer, string $cell, string $data) {
$writer->getDelegate()->setCellValue($cell, $data);
});
Sheet::macro('styleCells', function (Sheet $sheet, string $cellRange, array $style) {
$sheet->getDelegate()->getStyle($cellRange)->applyFromArray($style);
});
Sheet::macro('horizontalAlign', function (Sheet $sheet, string $cellRange, string $align) {
$sheet->getDelegate()->getStyle($cellRange)->getAlignment()->setHorizontal($align);
});
Sheet::macro('verticalAlign', function (Sheet $sheet, string $cellRange, string $align) {
$sheet->getDelegate()->getStyle($cellRange)->getAlignment()->setVertical($align);
});
Sheet::macro('wrapText', function (Sheet $sheet, string $cellRange) {
$sheet->getDelegate()->getStyle($cellRange)->getAlignment()->setWrapText(true);
});
Sheet::macro('mergeCells', function (Sheet $sheet, string $cellRange) {
$sheet->getDelegate()->mergeCells($cellRange);
});
Sheet::macro('columnWidth', function (Sheet $sheet, string $column, float $width) {
$sheet->getDelegate()->getColumnDimension($column)->setWidth($width);
});
Sheet::macro('rowHeight', function (Sheet $sheet, string $row, float $height) {
$sheet->getDelegate()->getRowDimension($row)->setRowHeight($height);
});
Sheet::macro('setFontFamily', function (Sheet $sheet, string $cellRange, string $font) {
$sheet->getDelegate()->getStyle($cellRange)->getFont()->setName($font);
});
Sheet::macro('setFontSize', function (Sheet $sheet, string $cellRange, float $size) {
$sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize($size);
});
Sheet::macro('textRotation', function (Sheet $sheet, string $cellRange, int $degrees) {
$sheet->getDelegate()->getStyle($cellRange)->getAlignment()->setTextRotation($degrees);
});
}
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
}
Здесь вы можете найти нужные свойства: здесь , вам просто нужно найти, какую функцию или формат вы хотите, а затем добавить его в файл поставщика, следуя этому правилу https://docs.laravel - excel.com/3.1/imports/extending.html#sheet.
после этого обязательно добавьте PHPExcelMacroServiceProvider
к config/app.php
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
... // Bunch of providers
App\Providers\PHPExcelMacroServiceProvider::class, // Add this provider to the list
],
Итак, чтобы использовать макрос, который вы просто делаете в app/Exports/ExampleReportExport.php
, мне просто нужно вызвать макрос. Пример:
$event->sheet->wrapText('A1:AC100');
$event->sheet->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE);
$event->sheet->setFontFamily('A1:AC100', 'Times New Roman');
$event->sheet->horizontalAlign('D1:Q2' , \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$event->sheet->horizontalAlign('E6:X6' , \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$event->sheet->verticalAlign('A1:AC100' , \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$event->sheet->verticalAlign('A8:D100' , \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_TOP);
$event->sheet->horizontalAlign('A6:X7', \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$event->sheet->horizontalAlign('E8:AC100', \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$event->sheet->verticalAlign('E7:X7' , \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_BOTTOM);
$event->sheet->verticalAlign('A8:D100' , \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_TOP);
$event->sheet->horizontalAlign('A8:D100', \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
$event->sheet->textRotation('E7:X7', 90);
Я буду рад, если найдется кто-то, кто понимает, что я пытаюсь объяснить, и желает изменить мое объяснение, чтобы мой ответ был более читаемым и более понятным для других. :)