Импорт CSV-файла, удаление пустых строк и немедленный экспорт без сохранения в базе данных - laravel excel - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь удалить все пустые строки из CSV и сделать его загружаемым. В этом процессе нет участия базы данных / модели.

Мой поток выглядит следующим образом:

1) Импортируйте CSV-файл. 2) Фильтр пустых строк. 3) Экспорт данных после удаления всех пустых строк.

Мой код выглядит следующим образом:

Контроллер

    public function formatCSV()
    {
        $path = storage_path('app/files/') . 'example.csv';
        Excel::import(new FormatCSV, $path);
    }

app / Imports / FormatCSV

<?php


namespace App\Imports;


use App\Exports\ExportFormattedCSV;
use App\Http\Services\AmenityService;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Excel;

class FormatCSV implements ToArray, WithChunkReading
{
    private $table,$service,$model;
    public function __construct()
    {
        $this->service = new AmenityService();
    }
    public function array(Array $rows)
    {   $rec_arr = array();
        foreach ($rows as $row)
        {
            $rec_arr[] = array_values($row);
        }
        $records_arr = $this->service->trimArray($rec_arr);

        $export = new ExportFormattedCSV($records_arr);
        //print_r($export);
        return Excel::download($export, 'csv.csv');
    }

    public function chunkSize(): int
    {
        return 10;
    }

}

функция trimArray

    public function trimArray($arr)
    {
        $final = array();

        foreach($arr as $k => $v)
        {
            if(array_filter($v)) {
                $final[] = $v;
            }
        }

        return $final;

    }

app / Exports / ExportFormattedCSV

<?php


namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromArray;

class ExportFormattedCSV implements FromArray
{
    protected $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }
    public function array(): array
    {
        return $this->data;
    }

}

С этим кодом ничего не происходит, в конце отображается пустым.

Однако, если я раскомментирую строку print_r($export)

Она отображает данные в виде:

App\Exports\ExportFormattedCSV Object
(
    [data:protected] => Array
        (
            [0] => Array
                (
                    [0] => First Name
                    [1] => Last Name
                    [2] =>  Roll No
                )

            [1] => Array
                (
                    [0] => Ram
                    [1] => Patel
                    [2] => 1
                )

            [2] => Array
                (
                    [0] => Rajuv
                    [1] => Roy
                    [2] => 2
                )

            [3] => Array
                (
                    [0] => Sunny
                    [1] => Deol
                    [2] => 5
                )

            [4] => Array
                (
                    [0] => Akshya
                    [1] => Kumar
                    [2] => 6
                )

            [5] => Array
                (
                    [0] => Amir Khan
                    [1] => 7
                    [2] => 
                )

            [6] => Array
                (
                    [0] => Salman
                    [1] => Khan
                    [2] => 9
                )

            [7] => Array
                (
                    [0] => Bobby
                    [1] => Deol
                    [2] => 10
                )

        )

)

Файл, который я тестирую, example.csv

First Name,Last Name, Roll No
Ram,Patel,1
Rajuv,Roy,2
,,
Sunny,Deol,5
Akshya,Kumar,6
Amir Khan,7
,,
Salman,Khan,9
Bobby,Deol,10,
Barun,Dhawan,11
,,
Virat,Kohli,13
Rohit,Sharma,14
...