用 Laravel Excel 等价于 pandas.read_csv(file)

Make the equivalent of pandas.read_csv(file) with Laravel Excel

我正在尝试使用 Laravel Excel 读取 .csv/.xlsx 文件,就像您使用 Python 库 pandas 一样,使用函数 read_csv(),但我不想将文件内容保存到 DataFrame 中,而是希望它们保存在 collection 中。所以几乎将第一行识别为 header 并根据 header 名称命名其他行键。

目前,我可以使用此导入文件和 运行 命令将每一行保存到 collection:

$collection = \Excel::toCollection(new TestImport, file);
<?php

namespace App\Imports;

use App\User;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;

class TestImport implements ToCollection
{
    public function collection(Collection $row)
    {
        return $row;
    }
}

但这样键 (header) 只是保存为 collection(一行)的另一个项目。到目前为止,我已经能够提出两种不理想的可能解决方案:

1) 先读取文件以获取 headers,然后将它们作为参数传递给导入的构造函数 class 并手动定义键名。

2) 读取文件后,遍历 collection 命名所有项目键。

有谁知道更好更直接的方法吗?

好吧,显然你需要做的就是实现 WithHeadingRow 关注点,代码变成这样:

<?php

namespace App\Imports;

use App\User;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class TestImport implements ToCollection, WithHeadingRow
{
    public function collection(Collection $rows)
    {
        return $rows;
    }
}

这将为您return 一个集合,其中的键根据 .csv 文件头设置。