Да, в Laravel есть набор инструментов, которые позволяют легко импортировать файлы Excel с разными полями на страницах.
Одним из самых популярных инструментов для работы с Excel в Laravel является пакет "MaatwebsiteExcel". Для его установки вам следует выполнить следующие шаги:
1. Установите пакет, выполнив в терминале команду:
composer require maatwebsite/excel
2. Подключите провайдер услуги и фасаду в файле config/app.php
:
'providers' => [ // ... MaatwebsiteExcelExcelServiceProvider::class, ], 'aliases' => [ // ... 'Excel' => MaatwebsiteExcelFacadesExcel::class, ],
Теперь, чтобы импортировать файл Excel с разными полями на страницах, вам нужно создать класс экспорта, используя интерфейс WithMultipleSheets
. Ниже приведен пример такого класса:
namespace AppExports; use MaatwebsiteExcelConcernsWithMultipleSheets; class MultipleSheetsExport implements WithMultipleSheets { protected $sheets; public function __construct(array $sheets) { $this->sheets = $sheets; } public function sheets(): array { $exports = []; foreach ($this->sheets as $sheet) { $exports[] = new $sheet['exportClass']($sheet['fields']); } return $exports; } }
В этом примере мы создаем класс MultipleSheetsExport
, который принимает массив листов с полями в конструкторе. Затем мы перебираем каждый лист и создаем экземпляр класса экспорта, передавая ему поля.
Далее создайте класс экспорта для каждого листа с соответствующими полями. Ниже приведен пример такого класса:
namespace AppExports; use MaatwebsiteExcelConcernsFromArray; use MaatwebsiteExcelConcernsWithHeadings; class SheetExport implements FromArray, WithHeadings { protected $fields; public function __construct(array $fields) { $this->fields = $fields; } public function array(): array { // Возвращаем массив данных для каждого поля } public function headings(): array { return array_keys($this->fields); } }
В этом примере мы создаем класс SheetExport
, который реализует интерфейсы FromArray
и WithHeadings
. Метод array()
возвращает массив данных для каждого поля, а метод headings()
возвращает массив с заголовками.
Наконец, чтобы импортировать файл, вы можете использовать следующий код в контроллере или где угодно в вашем приложении:
use AppExportsMultipleSheetsExport; use MaatwebsiteExcelFacadesExcel; public function import() { $sheets = [ [ 'exportClass' => SheetExport::class, 'fields' => [ 'field_1' => 'Поле 1', 'field_2' => 'Поле 2', // ... ], ], // ... ]; return Excel::download(new MultipleSheetsExport($sheets), 'import.xlsx'); }
В этом примере мы создаем массив листов с полями и передаем его в класс экспорта MultipleSheetsExport
. После этого мы вызываем метод download()
из фасады Excel
и передаем ему экземпляр класса экспорта и имя файла.
Таким образом, вы можете легко импортировать файл Excel с разными полями на страницах с помощью Laravel и пакета "MaatwebsiteExcel".