用 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 文件头设置。
我正在尝试使用 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 文件头设置。