Php сплит / чанк Excel с Maatwebsite Laravel -Excel v.3 - PullRequest
1 голос
/ 12 февраля 2020

У меня очень большие xlsx 1000000 строк, но для тестирования я использую Excel с 999 строками. Итак, чтобы сэкономить память, я хочу взять куски данных из этого файла и обработать их. Я нашел это https://docs.laravel-excel.com/3.1/imports/chunk-reading.html

namespace App\Imports;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\WithChunkReading;
class ProducttestImport implements ToArray,WithChunkReading
{
    public function array(array $row): array
    { return $row ; }
    public function chunkSize(): int
    { return 100; }
}

в контроллере

myFunc(){
$rows = Excel::toArray(new ProducttestImport(), $path.$excelName)[0];
return  $rows;
}

, но, похоже, я что-то упустил, потому что $ row имеет массив с 999 массивами. Мне нужен массив с 10 массивами (при разбиении на 999 строк).

Где я могу получить / получить эти куски?

1 Ответ

0 голосов
/ 20 февраля 2020

Обходной путь ..

namespace App\Exports;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromArray;
class ProducttestExport implements FromArray
{use Exportable;
    public $inputArr;

    public function __construct(array $inputArr = [])
    { $this->inputArr = $inputArr; }

    public function array() :array
    {
        if(count($this->inputArr) >0) return $this->inputArr;
        return [];
    }
}

В foreach

...
Excel::store( new ProducttestExport($array), $key.'_file.xlsx', 'my_disk' );
...

Затем обрабатывайте файлы один за другим ..

Но в любом случае я надеюсь, что кто-то знает, как получить куски и отправлю ответ.

...