如何在maatwebsite中获取excel到数组

Nik*_*aut 6 excel laravel laravel-excel maatwebsite-excel

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

下面的代码将下载文件:

return Excel::download(new SalesOrderExport('columns'),'test.xlsx')
Run Code Online (Sandbox Code Playgroud)

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

我尝试使用下面的代码,但它不起作用,因为该load方法在版本 3 中不可用。

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

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

Nik*_*aut 10

我和@narayan 努力将请求的 excel 文件放入数组。现在我可以使用以下代码正确获取数组

$rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata')); 
Run Code Online (Sandbox Code Playgroud)

在我的 SalesOrderExport 类中,我只有默认函数,这是抽象方法所必需的。

namespace App\Exports;

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

class SalesOrderExport implements FromCollection
{
    public function collection()
    {   
        return SalesOrder::all();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器代码

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

在 HTML 中

<input class="" type="file" name="sampledata" id="sampledata">
Run Code Online (Sandbox Code Playgroud)

我已经创建了这个导出

php artisan make:import SalesOrder
Run Code Online (Sandbox Code Playgroud)

附上相关图片

在此处输入图片说明在此处输入图片说明


Man*_*ash 9

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

\n

Controller

\n
$data = Excel::toArray(new UsersImport(), $request->file);\n
Run Code Online (Sandbox Code Playgroud)\n

UsersImport

\n
<?php\n    namespace App\\Imports;\n    use Illuminate\\Support\\Collection;\n    use Maatwebsite\\Excel\\Concerns\\ToCollection;\n\n    class UsersImport implements ToCollection\n    {\n       public function collection(Collection $rows)\n       {\n       }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

Json 数组结果

\n
array:2 [\xe2\x96\xbc\n  0 => array:2 [\xe2\x96\xbc\n           0 => "+126785XXXXX"\n           1 => "Jhon"\n       ]\n  1 => array:2 [\xe2\x96\xbc\n           0 => "+126784XXXXX"\n           1 => "Doe"\n       ]\n  ]\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
$data = Excel::toArray(new UsersImport(), $request->file);\n$phoneNumbersData= [];\nforeach ($data[0] as $key => $value) {\n  $phoneNumbersData[] = $value[0];\n}\nreturn $phoneNumbersData;\n
Run Code Online (Sandbox Code Playgroud)\n

希望这会对某人有所帮助。

\n