При работе с 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 предоставляет гибкие возможности для удовлетворения ваших конкретных потребностей. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует требованиям вашего проекта.