使用插件
要想实现 Laravel Excel 导入导出其实很简答。Laravel 中集成了 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的、富有表现力的代码实现Excel/CSV文件的导入和导出。
文档地址:https://docs.laravel-excel.com/3.1/getting-started
GitHub地址:https://github.com/Maatwebsite/Laravel-Excel
官方文档有很多种用法,以及详细的示例。下面我们一起来看下 Laravel 中使用Laravel Excel简单实现Excel文件的导入和导出。
1 安装扩展包
composer require maatwebsite/excel
- excel 导出文件
php artisan make:export GoodsExport
在app/export 下创建GoodsExport
选择数组形式导出
因为一般我们都是有选择性的导出指定数据。所以这里需要用 FromArray 来实现。
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromArray;
class TrafficExport implements FromArray
{
protected $invoices;
public function __construct(array $invoices)
{
$this->invoices = $invoices;
}
public function array(): array
{
return $this->invoices;
}
}
3.控制器
然后直接在控制器中操作导出数据即可。
<?php
namespace App\Http\Controllers;
use App\Exports\GoodsExport;
use Maatwebsite\Excel\Facades\Excel;
use App\Goods;
class WorkController extends Controller
{
public function export()
{
//条件
$where = [['service_id', '=', auth('api')->id()]];
$model = new Goods;
$data = $model->where($where)->select('name','status')->get()->toArray();
//因为要设置行名称,所以讲表头合并到结果集的第一行
$result = array_merge([[
'名称',
'状态'
]], $data);
return Excel::download(new TrafficExport($result), '商品数据.xlsx');
}
}
- collection 导出 集合导出
如果到处数据表中的所有 数据可以选择使用集合到处
<?php
namespace App\Exports;
use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;
class UsersExport implements FromCollection
{
public function collection()
{
return User::all();
}
}
然后再控制器中操作数据即可
<?php
namespace App\Http\Controllers;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
class UsersController extends Controller
{
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
}
导入excel文件
创建import
php artisan make:import UsersImport --model=User
该命令会在 app/Imports 创建 UsersImport.php 文件。
<?php
namespace App\Imports;
use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
class UsersImport implements ToModel
{
/**
* @param array $row
*
* @return User|null
*/
public function model(array $row)
{
return new User([
'name' => $row[0],
'email' => $row[1],
'password' => Hash::make($row[2]),
]);
}
}
然后直接在控制器中导出数据即可
use App\Imports\UsersImport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;
class UsersController extends Controller
{
public function import()
{
Excel::import(new UsersImport, 'users.xlsx');
return redirect('/')->with('success', 'All good!');
}
}