我有非常大的 xlsx 1000000 行,但为了测试,我使用了 999 行的 Excel。所以,为了节省内存,我想从这个文件中获取数据 block 并处理它们。我找到了这个 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; }
}
在 Controller 中
myFunc(){
$rows = Excel::toArray(new ProducttestImport(), $path.$excelName)[0];
return $rows;
}
但似乎我遗漏了什么,因为 $rows 有包含 999 个数组的数组。我需要包含 10 个数组的数组(分块 999 行时)。
我在哪里可以访问/获取这些 block ?
最佳答案
解决方法..
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' );
...
然后一个一个处理文件..
但无论如何我希望有人知道如何获取 block 并发布答案。
关于Php split/chunk Excel with Maatwebsite Laravel-Excel v.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60195316/