Конвертировать Excel в массив в Laravel - PullRequest
0 голосов
/ 17 октября 2018

Я использую плагин Matlab Excel для преобразования Excel в массив.Мой код: -

public static function ImportExcel($table="", $path=""){
    $data = array();
    Excel::load($path, function ($reader) use($data) {
        $data = $reader->toArray();
        //here data has all excel data in array.
    });
    return $data; //but here it shows empty array.
}

Проверьте мои комментарии в коде.Внутри Excel :: load data есть массив всех данных.Но его область действия только внутри Excel :: load.Мне это нужно снаружи.

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

попробуйте так

$data = Excel::load($path, function ($reader) use($table) {
        $data = $reader->toArray();
        //here data has all excel data in array.
});

в противном случае создайте массив до и после clousers

$array = [];
Excel::load($path, function ($reader) use($table, $array) {
    $array = $reader->toArray();
    //here data has all excel data in array.
});

третий способ сделать это

$results = Excel::load($path);
$data = $results->toArray();
0 голосов
/ 17 октября 2018

Я пишу ответ более подробно для других лиц, которые хотят использовать Maatwebsite\Excel:

 if ($request->hasFile('imported_file'))
            {
            $updateFile = $request->file('imported_file');

            $path = $updateFile->getRealPath();
            $fileExtension = $updateFile->getClientOriginalExtension();

            $formats = ['xls', 'xlsx', 'ods', 'csv'];
            if (! in_array($fileExtension, $formats))
            {
                return back()->with("status", 'The uploaded file format is not allowed.');
            }

            $data = Excel::load($path, function ($reader)
            {
            }, 'UTF-8')->get();


            if (! empty($data) && $data->count())


               {
                    $data = $data->toArray();
                    foreach ($data as $perData)
                    {
                        // Do whatever you like on per data in your imported data
                    }
               }
         }
0 голосов
/ 17 октября 2018

Загрузка имеет внутреннюю функцию, поэтому переменные заключены в эту функцию, и она также не может получить доступ к переменным извне этой функции, если они не переданы в функцию с помощью оператора use.Другими словами, $ data внутри функции не ссылается на $ data вне ее.Чтобы это исправить, вам нужно добавить $data в оператор use следующим образом:

public static function ImportExcel($table="", $path=""){
    $data = array();
    Excel::load($path, function ($reader) use($table, $data) {
        $data = $reader->toArray();
        //here data has all excel data in array.
    });
    return $data; //but here it shows empty array.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...