Установить активный лист в Laravel-Excel 3.0 - PullRequest
0 голосов
/ 21 сентября 2018

Я использовал предыдущие версии 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);? 1016 *

1 Ответ

0 голосов
/ 22 сентября 2018

Вы должны использовать BeforeWriting (https://laravel -excel.maatwebsite.nl / 3.0 / exports / extending.html # available-events ) для 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;
  }
}
...