一、如果是laravel5.8那么自动会安装最新的3.1的包
composer require maatwebsite/excel
如果你的laravel版本是5.5那么安装下面的2.1.0版本的包还可以用,
步骤1、composer 运行下面命令安装
composer require "maatwebsite/excel:~2.1.0"
如果本地安装提示:
报上面错的话 执行:
COMPOSER_MEMORY_LIMIT=-1 composer require "maatwebsite/excel:~2.1.0"
二、下面步骤2和3不管什么版本,闭着眼都要添加
步骤2、打开laravel项目中的config/app.php文件,添加以下两处
//providers元素添加
Maatwebsite\Excel\ExcelServiceProvider::class,
//aliases元素添加
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
步骤3、发送配置文件(执行后会自动生成一个配置文件config/excel.php)
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
三、maatwebsite/excel:~3.1.0的包导出代码
php artisan make:export UsersExport --model=User
控制器中导出,这样默认导出模型对应的表的数据
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;
class UsersController extends Controller
{
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
}
但是一般我们要导出的可能不止单表的数据,那么通常我们会先查询组合好数据格式(二维数组) ,然后导出。
生成导出文件app/Exports/TestExport
php artisan make:export TestExport
如图:
复制下面代码,编辑TestExport.php文件
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
class TestExport implements FromCollection
{
// 要导出的数据
public $data;
public function __construct(array $data)
{
$this->data = $data;
}
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return collect($this->data);
}
}
控制器中代码如下:
public function export(Request $request)
{
$cellData[] = ['学号','姓名','成绩'];
$list = [
['10001','AAAAA','99'],
['10002','BBBBB','92'],
['10003','CCCCC','95'],
['10004','DDDDD','89'],
['10005','EEEEE','96'],
];
if ($list) {
$cellData = array_merge($cellData, $list);
}
//此时打印出结果如下
// $data = [
// ['学号','姓名','成绩'],
// ['10001','AAAAA','99'],
// ['10002','BBBBB','92'],
// ['10003','CCCCC','95'],
// ['10004','DDDDD','89'],
// ['10005','EEEEE','96'],
// ];
// $data = [
// // ...
// ];
// download 方法直接下载,store 方法可以保存。具体的导出类型等看官方的文档吧
$obj = new TestExport($cellData);
return Excel::download($obj, 'test文件名称.xls');//***文件名
}
访问路由, 成功下载excel文件!完成。
三、maatwebsite/excel:~2.1.0的包导出代码
4、开始测试导出
- 控制器引入Excel
贴代码:
/*
* 后端直接导出excel
*/
public function export(Request $request)
{
$cellData[] = ['学号','姓名','成绩'];
$list = [
['10001','AAAAA','99'],
['10002','BBBBB','92'],
['10003','CCCCC','95'],
['10004','DDDDD','89'],
['10005','EEEEE','96'],
];
if ($list) {
$cellData = array_merge($cellData, $list);
}
//此时打印出 $cellData 结果如下
// $data = [
// ['学号','姓名','成绩'],
// ['10001','AAAAA','99'],
// ['10002','BBBBB','92'],
// ['10003','CCCCC','95'],
// ['10004','DDDDD','89'],
// ['10005','EEEEE','96'],
// ];
Excel::create( 'Excel表名字',function ($excel) use ($cellData){
$excel->sheet('score', function ($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->export('xlsx');
# 如果导出中午乱码用下面的
// Excel::create(iconv('UTF-8', 'GBK', 'Excel表名字'),function ($excel) use ($cellData){
// $excel->sheet('score', function ($sheet) use ($cellData){
// $sheet->rows($cellData);
// });
// })->export('xlsx');
}