Laravel экспорт excel из массива возвращает пустой файл

#php #laravel

#php #laravel

Вопрос:

Я хочу загрузить файл Excel из массива с помощью Laravel

Библиотека:

 use MaatwebsiteExcelFacadesExcel;
 

Это мой код:

 $ex = [
    ['one', 'name'],
    ['two', 'family']
];

return Excel::download(new TestExport([$ex]), 'test.xlsx');
 

Мой класс:

 class TestExport
{
    protected $arrays;

    public function __construct(array $arrays)
    {
        $this->arrays = $arrays;
    }

    public function array(): array
    {
        return $this->arrays;
    }
}
 

Но этот код загружает пустой xlsx файл

Комментарии:

1. какую библиотеку вы используете?

2. @aimme я отредактировал свой вопрос. Я использую MaatwebsiteExcelFacadesExcel;

Ответ №1:

Я нашел ответ:

 class TestExport implements FromCollection, WithHeadings
{
    protected $data;
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function __construct($data)
    {
        $this->data = $data;
    }
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function collection()
    {
        return collect($this->data);
    }
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function headings() :array
    {
        return [
            'ID',
            'Name',
            'Email',
        ];
    }
}
 

Источник: https://www.itsolutionstuff.com/post/laravel-create-csv-file-from-custom-array-using-maatwebsiteexample.html

Комментарии:

1. поэтому отметьте это как правильный ответ. добро пожаловать в stackoverflow 🙂

Ответ №2:

Я ценю ваше исследование, чтобы найти ответ самостоятельно. Соглашаясь с вашим собственным ответом, я также хочу подчеркнуть, что библиотека Excel, которую вы используете, принимает коллекцию Laravel, а не массив. Итак, вам нужно преобразовать ваш массив в коллекцию, используя вспомогательную функцию ‘collect’, как показано ниже:

 $myCollection = collect($this->ar);
 

Затем экспортируйте его с помощью фасада Excel:

 return Excel::download(new TestExport($myCollection), 'test.xlsx');