我已经使用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);
属于哪里?
答案 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;
}
}