如何让 excel 在自定义网站中排列

How to get excel to array in maatwebsite

我正在尝试使用最新版本的 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 获取数组的想法。

  1. 使用以下命令创建导入文件。

    php artisan make:import 测试导入

  2. 在 TestImport 中进行如下更改:

    命名空间App\Imports;

    使用App\User; 使用 Illuminate\Support\Collection; 使用 Maatwebsite\Excel\Concerns\ToCollection;

    class TestImport 实现 ToCollection { public 函数 collection(Collection $行) { return $行; } }

  3. 在 Controller 中进行如下更改:

    // 原代码:$rows = Excel::import(new TestImport, 'test.xlsx');

    $rows = Excel::toCollection(new TestImport, 'test.xlsx');

你应该试试这个:

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

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

正确获取数组
$rows = Excel::toArray(new SalesOrderImport, $request->file('sampledata')); 

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

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

附加相关图片

我是这样实现的:

在我的 UsersImport class 中: 命名空间 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];

希望对你有所帮助

我添加它是希望有人可以为此获得其他类型的解决方案。 版本 - "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"
       ]
  ]

还有一个奖金, 现在假设您只需要 phone 数字,然后在 controller-

中从中创建一个自定义数组
$data = Excel::toArray(new UsersImport(), $request->file);
$phoneNumbersData= [];
foreach ($data[0] as $key => $value) {
  $phoneNumbersData[] = $value[0];
}
return $phoneNumbersData;

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

以下是一些基于使用常用文件输入元素导入 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
}

我试过这样的东西,效果很好; 在您的导入文件中执行此操作

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

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

然后在控制器中执行此操作;

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