如何在maatwebsite中获得Excel数组

时间:2019-02-27 10:11:30

标签: excel laravel maatwebsite-excel laravel-excel

我正在尝试使用最新版本的Laravel-Excel(3.1.9)将Excel文件转换为数组

下面的代码将下载文件:

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

但是我需要将其转换为仅获取数组。我现在不希望将此Excel数据存储在数据库中。

我尝试使用下面的代码,但由于load方法在版本3中不可用,因此无法使用。

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

请分享您对如何从Excel中获取数组的想法。

7 个答案:

答案 0 :(得分:2)

我和@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();
    }
}

我的控制器代码

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 here enter image description here

答案 1 :(得分:1)

我添加它是希望有人可以为此获得其他类型的解决方案。 版本-"maatwebsite/excel": "^3.1"

Controller

$data = Excel::toArray(new UsersImport(), $request->file);

UsersImport

<?php
    namespace App\Imports;
    use Illuminate\Support\Collection;
    use Maatwebsite\Excel\Concerns\ToCollection;

    class UsersImport implements ToCollection
    {
       public function collection(Collection $rows)
       {
       }
    }

Json阵列结果

array:2 [▼
  0 => array:2 [▼
           0 => "+126785XXXXX"
           1 => "Jhon"
       ]
  1 => array:2 [▼
           0 => "+126784XXXXX"
           1 => "Doe"
       ]
  ]

还有一个奖励 现在,假设您只需要电话号码,然后根据控制器中的号码创建一个自定义数组-

$data = Excel::toArray(new UsersImport(), $request->file);
$phoneNumbersData= [];
foreach ($data[0] as $key => $value) {
  $phoneNumbersData[] = $value[0];
}
return $phoneNumbersData;

希望,这将对某人有所帮助。

答案 2 :(得分:1)

以下是一些基于使用常用文件输入元素导入 csv 文件的工作示例。就我而言,一旦上传,文件就可以通过请求对象作为“csv_file”访问。

public function importCSV(Request $request)
{
    // Get the csv rows as an array
    $theArray = Excel::toArray(new stdClass(), $request->file('csv_file'));

    // Get the csv rows as a collection
    $theCollection = Excel::toCollection(collect([]), $request->file('csv_file'));

    //etc
}

答案 3 :(得分:0)

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');

答案 4 :(得分:0)

这是我实现这一目标的方法:

在我的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];

希望对您有帮助。

答案 5 :(得分:0)

我尝试过类似的方法,效果很好; 在您的导入文件中执行此操作

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

public function collection(Collection $row)
{
    return $row;
}

然后在控制器中,这样做;

$row = Excel::toCollection(new CourseImport, request()->file('course'));

答案 6 :(得分:-1)

您应该尝试以下操作:

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