Сделайте эквивалент pandas.read_csv (файл) с помощью Laravel Excel - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь прочитать файл .csv / .xlsx, используя Laravel Excel, так же, как вы делали бы это с пандами библиотеки Python, с помощью функции 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) Считайте файл fist только для того, чтобы получить заголовки, а затем передайте их в качестве аргумента конструктору класса импорта. и определите имя ключа вручную.

2) После прочтения файла переберите коллекцию с именами всех ключей элементов.

Кто-нибудь знает лучший и более простой способ сделать это?

1 Ответ

0 голосов
/ 18 октября 2019

Хорошо, по-видимому, все, что вам нужно сделать, это реализовать задачу 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.

...