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

时间:2018-09-21 17:35:58

标签: laravel laravel-excel

我已经使用Laravel-Excel的早期版本来导出数据,并且在过去,我可以使用$sheets->setActiveSheetIndex(0)->download('xls');link to PHPSpreadsheet documentation)在用户打开时设置活动标签文件。

在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 个答案:

答案 0 :(得分:1)

您应该使用BeforeWriting(CSS overview in the GTK manual)来设置ActiveSheetIndex。

我在您的代码中添加了RegistersEventListeners,在我的项目中它以这种方式工作,请告诉我这是否对您有用。

public class JsonParserDecorator {
    private final JsonParser jsonParser;

    public JsonParserDecorator(JsonParser jsonParser) {
        this.jsonParser = jsonParser;
    }

    public Item readItem() throws IOException {
        Item item = new Item();

        if (jsonParser.currentToken() != JsonToken.START_OBJECT) {
            throw new IOException("JSON object expected");
        }

        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
            String fieldName = jsonParser.currentName();
            jsonParser.nextToken();

            switch (fieldName) {
                case "itemId":
                    item.setId(jsonParser.getLongValue());
                    break;
                case "description":
                    item.setDescription(jsonParser.getText());
                    break;
                default:
                    break;
            }
        }

        return item;
    }
}