【问题标题】:Make the equivalent of pandas.read_csv(file) with Laravel Excel使用 Laravel Excel 制作相当于 pandas.read_csv(file) 的内容
【发布时间】:2019-10-18 07:00:02
【问题描述】:

我正在尝试使用 Laravel Excel 读取 .csv/.xlsx 文件,其方式与使用 Python 库 pandas 的方式相同,使用函数 read_csv(),但不是将文件内容保存到 DataFrame我希望它们在一个集合中。所以几乎将第一行标识为标题并根据标题名称命名其他行键。

目前,我可以使用此导入文件将每一行保存到一个集合中并运行以下命令:

$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;
    }
}

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

1) 读取文件头只是为了获取标题,然后将它们作为参数传递给导入类的构造函数并手动定义键名。

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

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

【问题讨论】:

    标签: php excel laravel pandas laravel-excel


    【解决方案1】:

    好的,显然你需要做的就是实现 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;
        }
    }
    
    

    这将返回一个集合,其中包含根据 .csv 文件头设置的键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2017-06-30
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多