Установить активный лист в Laravel-Excel 3.0
Я использовал предыдущие версии Laravel-Excel для экспорта данных, и в прошлом я мог использовать $sheets->setActiveSheetIndex(0)->download('xls');
( ссылка на документацию PHPSpreadsheet), чтобы установить активную вкладку, когда пользователь открывает файл.
В версии 3.0 я не могу понять, где это поставить. Файл загружается, если я не пытаюсь установить активный лист, чтобы остальная часть кода была действительной. Я попытался добавить его в контроллере экспорта, как показано ниже, и он выдает ошибку Call to undefined method App\Exports\TechMatrixExport::setActiveSheetIndex()
, В приведенном ниже примере я хочу, чтобы TechnologiesSheet был активным, когда пользователь открывает файл.
namespace App\Exports;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class TechMatrixExport implements WithMultipleSheets
{
use Exportable;
public function sheets(): array
{
$sheets = [];
$sheets[] = new TechnologiesSheet();
$sheets[] = new NotesSheet();
$sheets[] = new InputsSheet();
$sheets[] = new ReferencesSheet();
return $sheets;
}
}
контроллер:
public function __construct(\Maatwebsite\Excel\Excel $excel)
{
$this->excel = $excel;
}
public function exportAll()
{
return (new TechMatrixExport)->setActiveSheetIndex(0)->download('tech_matrix.xlsx');
}
Где ->setActiveSheetIndex(0);
принадлежат?
1 ответ
Вы должны использовать BeforeWriting ( https://laravel-excel.maatwebsite.nl/3.0/exports/extending.html) для setActiveSheetIndex.
Я добавил RegistersEventListeners в ваш код, у меня это работает таким образом в моем проекте, дайте мне знать, если это работает для вас.
namespace App\Exports;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\RegistersEventListeners;
use Maatwebsite\Excel\Events\BeforeExport;
use Maatwebsite\Excel\Events\BeforeWriting;
class TechMatrixExport implements WithMultipleSheets, WithEvents
{
use Exportable, RegistersEventListeners;
public function registerEvents(): array
{
return [
// Handle by a closure.
BeforeExport::class => function(BeforeExport $event) {
$event->writer->getProperties()->setCreator('You')->setTitle("Title");
},
BeforeWriting::class => function(BeforeWriting $event) {
$event->writer->setActiveSheetIndex(0);
},
];
}
public function sheets(): array
{
$sheets = [];
$sheets[] = new TechnologiesSheet();
$sheets[] = new NotesSheet();
$sheets[] = new InputsSheet();
$sheets[] = new ReferencesSheet();
return $sheets;
}
}