Как получить Excel для массива в maatwebsite - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь преобразовать файл Excel в массив, используя последнюю версию Laravel-Excel (3.1.9)

Код ниже загрузит файл:

return Excel::download(new SalesOrderExport('columns'),'test.xlsx')

Но мне нужно преобразовать его, чтобы получить только массив.На данный момент я не хочу хранить эти данные Excel в базе данных.

Я пытался использовать приведенный ниже код, но он не работал, так как метод load недоступен в версии 3.

Excel::load($request->file('sampledata'), function ($reader) {
    return response()->json($reader);
});

Пожалуйста, поделитесь своими мыслями о том, как получить массив из Excel.

Ответы [ 4 ]

0 голосов
/ 13 марта 2019

Вот как я этого добился:

В моем классе UsersImport: пространство имен App \ Imports;

use App\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;

class UsersImport implements ToModel
{
    use Importable;

    public function model(array $row)
    {
        return new User([
           'id' => $row[0]
        ]);
    }
}

И в контроллере:

$imported_users = (new UsersImport)->toArray(request()->file('excel_file'))[0];

Надеюсьэто тебе поможет.

0 голосов
/ 27 февраля 2019

Вы должны попробовать это:

$data = Excel::load($request->file('sampledata'), function ($reader) use($table) {
        $data = $reader->toArray();
        //here data has all excel data in array.
});
0 голосов
/ 27 февраля 2019

Я и @narayan изо всех сил пытались превратить запрошенный файл Excel в массив.Теперь я могу правильно получить массив с кодом ниже

$rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata')); 

В моем классе SalesOrderExport у меня есть только функция по умолчанию, которая требуется как абстрактный метод.

namespace App\Exports;

use App\SalesOrder;
use Maatwebsite\Excel\Concerns\FromCollection;

class SalesOrderExport implements FromCollection
{
    public function collection()
    {   
        return SalesOrder::all();
    }
}

MyКод контроллера

public function importTest(Request $request)
{
    $rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata'));
    return response()->json(["rows"=>$rows]);
}

И в HTML

<input class="" type="file" name="sampledata" id="sampledata">

Я уже создал этот экспорт с помощью

php artisan make:import SalesOrder

Прикрепление связанных изображений

enter image description hereenter image description here

0 голосов
/ 27 февраля 2019

1) Создайте файл импорта, используя следующую команду.

php artisan make:import TestImport

2) Внутри TestImport внесите следующие изменения:

namespace App\Imports;

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

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

3) В Controller внесите следующие изменения:

 $rows = Excel::import(new TestImport, 'test.xlsx');
...