在Laravel-Excel 3.0中设置活动表格

4

我之前使用过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');
}
< p > ->setActiveSheetIndex(0);属于哪个部分?< /p >

代码根据文档看起来是正确的,所以你并不疯狂。你能否执行dd(TechMatrixExport)确认你实际上获取了Spreadsheet的实例?这就是函数所在的地方:https://github.com/PHPOffice/PhpSpreadsheet/blob/master/src/PhpSpreadsheet/Spreadsheet.php#L809 - jmadsen
1个回答

2

您应该使用BeforeWriting (https://laravel-excel.maatwebsite.nl/3.0/exports/extending.html#available-events)来设置活动工作表索引。

我向您的代码中添加了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;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接