PHP

Laravel导出excel数据

Posted by Liao on 2019-07-12

Laravel 导出excel

1.扩展包的安装

在laravel项目下的terminal安装:

composer require maatwebsite/excel

2.config/app.php文件下的providers数组下加载如下类:

1
2
3
4
'providers' => [
...
Maatwebsite\Excel\ExcelServiceProvider::class,
],

3.aliases 数组下加载如下类:

1
2
3
4
5
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
],

4.生成Laravel Excel的配置文件

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

然后你会发现在config目录下有一个excel.php文件

5.excel数据导出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 <?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Excel;
class ExcelController extends Controller
{
public function export(){
$cellData = [
['学号','姓名','成绩'],
['10001','AAAAA','99'],
['10002','BBBBB','92'],
['10003','CCCCC','95'],
['10004','DDDDD','89'],
['10005','EEEEE','96'],
];
Excel::create('学生成绩',function($excel) use ($cellData){ //批量赋值
$excel->sheet('score', function($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->export('xls');
}
}

excel数据导入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
一、数据量较小的时候:
public function import(){
$res = Excel::load('excel文件的具体位置', function($reader) {
$data = $reader->all();
dd($data);
})->getSheet()->toArray();
dd($result); // 打印出excel表中数据的结果
}

二、数据量较大的时候 //处理200条数据
public function import()
{
Excel::Filter'chunk')->load('excel文件的具体位置')->chunk(200,function($reader){
dd($reader);
});
}

5.参考事例

dataController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public function upload(Request $request,Excel $excel)
{
if($request->isMethod('POST'))
{
//var_dump($_FILES);
$file = $request->file('source'); //从表单处获取上传文件
//文件是否上传成功
if($file->isValid())
{
//原文件名
$originalName = $file->getClientOriginalName();
//扩展名
$ext = $file-> getClientOriginalExtension(); //上传文件的后缀(xlsx)
//MimeType
$type = $file ->getClientMimeType(); //媒体类型
//临时绝对路径
$realPath = $file ->getRealPath();
$filename = uniqid() . '.' . $ext;
Storage::disk('uploads')->put($filename, file_get_contents($realPath)); //把上传的文件保存在磁盘

$result = $excel->load('storage\app\uploads/'.$filename, function($reader) {

})->getSheet()->toArray(); //(把excel表格存储到app\storage文件夹下)通过相对路径获取到excel表格的数据 转为二维数组

//dd($result); //能打印出上传的文件

foreach ($result as $value) //从数组中取出值
{
$info = new Upload(); //创建一个模型的对象(Upload.php是连接数据库的模型)
$info-> department = $value['0'];
$info-> name = $value['1'];
$info-> phone = $value['2'];
$info-> short_number = $value['3'] ;

$res = $info -> save();
}
if($res)
{
return redirect('/show')->with('success','成功上传!');

}

}

}
return view('file\fileUpload'); //返回视图
}

Model.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Upload extends Model
{
protected $table = 'info';
public $timestamps = false;
protected $fillable = ['department','name','phone','short_number'];//可批量赋值

}



文件上传的视频链接:

https://www.imooc.com/learn/219