Использование фильтра (чанка) дает ошибку - PullRequest
0 голосов
/ 29 августа 2018

Я использую Laravel-Excel 2.1. Я пытаюсь использовать chunk () для чтения большого импортированного файла Excel, но получаю сообщение об ошибке «Метод noHeading не существует».

Мой оригинальный код

Этот код отлично работает для чтения импортированных файлов.

$column_number = 5;
$rows = Excel::load('storage/app/public/upload/myfiles.xlsx', function($reader) use ($column_number)
{
    $reader->noHeading();
    $reader->takeColumns($column_number);
    $reader->setDateFormat('d-m-Y');

})->get();

После использования кусков, как в документации

Этот код выдает ошибку Method noHeading does not exist.. Обратите внимание, что я добавил filter('chunk') и chunk(250

$column_number = 5;
$rows = Excel::filter('chunk')->load('storage/app/public/upload/myfiles.xlsx')->chunk(250, function($reader) use ($column_number)
{
    $reader->noHeading();
    $reader->takeColumns($column_number);
    $reader->setDateFormat('d-m-Y');

})->get();

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Переменная $reader, передаваемая вашему закрытию, является экземпляром ExcelParser, а не LaravelExcelReader, поэтому не имеет метода noHeading(). Excel::filter() возвращает читателя, поэтому вы должны быть в состоянии сделать это:

$column_number = 5;
$rows = Excel::filter('chunk')
    ->noHeading()
    ->takeColumns($column_number)
    ->setDateFormat('d-m-Y');
    ->load('storage/app/public/upload/myfiles.xlsx')
    ->chunk(250, function($results) {return $results;});

Абсолютно не проверено!

0 голосов
/ 29 августа 2018

Я думаю, вам нужно обновить ваш код, как показано ниже,

$column_number = 5;
$rows = Excel::filter('chunk')->load('storage/app/public/upload/myfiles.xlsx')->chunk(250, function($data) use ($column_number)
 {
     foreach($data as $reader){
       $reader->noHeading();
       $reader->takeColumns($column_number);
       $reader->setDateFormat('d-m-Y');
     }
 })->get();
...