Полное руководство по автоматическому изменению размера столбцов в Laravel Excel

При работе с Laravel Excel одним из распространенных требований является автоматическая регулировка ширины столбцов в зависимости от их содержимого. Это гарантирует, что файл Excel, созданный вашим приложением Laravel, выглядит профессионально и легко читается. В этой статье мы рассмотрим несколько методов автоматического изменения размера столбцов в Laravel Excel, а также приведем примеры кода.

Методы автоматического изменения размера столбцов:

Метод 1: использование метода autoSize

use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
class MyExport implements WithEvents
{
    public function registerEvents(): array
    {
        return [
            AfterSheet::class => function (AfterSheet $event) {
                $event->sheet->getDelegate()->getColumnDimension('A')->setAutoSize(true);
                // Repeat the above line for each column you want to auto-size
            },
        ];
    }
}
Excel::store(new MyExport, 'filename.xlsx');

Метод 2: использование признака AutoSize

use Maatwebsite\Excel\Concerns\AutoSize;
class MyExport implements WithHeadings
{
    use AutoSize;
    // ...
}

Метод 3: использование признака ColumnWidth

use Maatwebsite\Excel\Concerns\ColumnWidth;
class MyExport implements WithHeadings
{
    use ColumnWidth;
    public function columnWidths(): array
    {
        return [
            'A' => 15,
            'B' => 20,
            // Define the width for each column as desired
        ];
    }
}

Метод 4: расчет ширины столбца вручную

use Maatwebsite\Excel\Facades\Excel;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class MyExport implements WithCustomValueBinder
{
    public function bindValue(Worksheet $worksheet, string $cell, $value): bool
    {
        // Calculate the content length for each column
        $column = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($cell);
        $contentLength = mb_strlen($value, 'UTF-8');
        // Get the current column width
        $currentWidth = $worksheet->getColumnDimension($column)->getWidth();
        // Calculate the required width based on content length
        $requiredWidth = max($currentWidth, $contentLength * 1.1);
        // Set the column width
        $worksheet->getColumnDimension($column)->setWidth($requiredWidth);
        return parent::bindValue($worksheet, $cell, $value);
    }
}
Excel::store(new MyExport, 'filename.xlsx');

Реализуя любой из этих методов, вы можете легко добиться автоматического изменения размера столбцов в Laravel Excel. Предпочитаете ли вы использовать встроенные признаки, прослушиватели событий или ручные вычисления, Laravel Excel предоставляет гибкие возможности для удовлетворения ваших конкретных потребностей. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует требованиям вашего проекта.