Errorr Возвращаемое значение Maatwebsite \ Excel \ Sheet :: mapArraybleRow () должно иметь тип массив, возвращаемая строка - PullRequest
0 голосов
/ 20 января 2020

Я только что обновил Laravel 5.4 до 5.5, и теперь мне нужно изменить всю кодировку, в которой использовался старый Laravel -Excel.

Я использую php 7.2.25, Windows / Wamp.

Я пытаюсь загрузить файл Excel, получить его данные, сделать много проверок и вычислений на нем (пока не в коде), а затем создать новый файл Excel и дать пользователю Windows Параметр «Сохранить файл».

  1. Не знаете, как открыть окно сохранения файла Windows, объяснений в документации нет.

1.1 Если Я не могу получить Windows окно сохранения файла, я не уверен, как установить путь к: Мои документы \ test, например.

С кодом, который я имею, я получаю эту ошибку:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR) Ошибка типа: Возвращаемое значение Maatwebsite \ Excel \ Sheet :: mapArraybleRow () должен иметь тип массива, возвращаемая строка

Код класса My Import:

namespace App\Imports;

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

class TimesheetsImport implements ToCollection, WithHeadingRow
{
private $user;

public function __construct($param)
{
    $this->user = $param;
}

public function collection(Collection $rows)
{
    $data = new Collection([$this->user->fullName()]);
    foreach ($rows as $row) 
    {
        $data->put($row['date'], $row['in'], $row['out']);
    }

return Excel::download(new TimesheetsExport($data), 'testtttt.xlsx');

Класс My Export:

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Collection;

class TimesheetsExport implements FromCollection
{
    protected $rows;

    public function __construct(Collection $rows)
    {
        $this->rows = $rows;
    }

    public function collection()
    {
        return $this->rows;
    }
}

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 21 января 2020

Через полтора дня мне удалось заставить его работать.

Рабочий код:

Класс импорта:

namespace App\Imports;

use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Facades\Excel;
use App\User;

class TimesheetsImport implements ToCollection, WithHeadingRow
{
    public $data;

    public function collection($rows)
    {
        $this->data = $rows;
    }
}

Класс экспорта:

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;

class TimesheetsExport implements FromCollection
{
    protected $rows;

    public function __construct($rows)
    {
        $this->rows = $rows;
    }

    public function collection()
    {
        return $this->rows;
    }
}

Мой контроллер:

public function importTimesheets(Request $request)
    {        
        $import = new TimesheetsImport;
        $rows = Excel::toCollection($import, $request->file('file'));

        return Excel::download(new TimesheetsExport($rows), 'test.xlsx');
    }

С этим кодом я также получаю Windows «Сохранить файл».

Это было не весело, но сделано Надеюсь, это поможет кому-то еще.

...