Laravel Excel 实现 Excel-CSV 文件导入导出功能
laravel excel 是一款基于 phpexcel 开发的laravel框架专用的 excel/csv 文件导入导出功能的扩展包,用起来的非常方便。
它的 github 地址是:https://github.com/maatwebsite/laravel-excel
安装
我们就按照github上的readme文件进行安装吧。
composer require "maatwebsite/excel:~2.1.0"
在 config/app.php 中注册服务提供者到 providers 数组:
maatwebsite\excel\excelserviceprovider::class,
在 config/app.php 中注册门面到 aliases 数组:
'excel' => maatwebsite\excel\facades\excel::class,
生成 laravel excel 的配置文件,使用如下命令:
php artisan vendor:publish --provider="maatwebsite\excel\excelserviceprovider"
然后你会发现在 config 目录下有一个 excel.php 文件 ,大概的配置项,主要就是缓存,表单,和导入,导出的一些设置。
导出文件
我待会直接拿我的测试代码进行展示,不过在这之前你需要一条路由和一个控制器(一个导出方法)
//excel导出 route::get('/excel/export','member\membercontroller@export')->name('/excel/export'); //excel导入 route::get('/excel/import','member\membercontroller@import')->name('/excel/import');
创建控制器,可以使用 artisan 命令或者手动创建:
php artisan make:controller 控制器名称
导出方法:
<?php namespace app\http\controllers\member; use app\http\controllers\basecontroller; use app\model\member\memberfollow; use illuminate\http\request; use illuminate\database\queryexception; use excel; class membercontroller extends basecontroller { /** * * excel导出 */ public function export() { ini_set('memory_limit','500m'); set_time_limit(0);//设置超时限制为0分钟 $celldata = memberfollow::select('xt_name','sex','face')->limit(5)->get()->toarray(); $celldata[0] = array('昵称','性别','头像'); for($i=0;$i<count($celldata);$i++){ $celldata[$i] = array_values($celldata[$i]); } //dd($celldata); excel::create('用户信息',function($excel) use ($celldata){ $excel->sheet('score', function($sheet) use ($celldata){ $sheet->rows($celldata); }); })->export('xls'); die; } }
我来对上面的代码进行解释下。
a. ini_set 设置内存溢出大小和超时时间是因为我的数据量比较大,不想直接去 php.ini 中修改,所以直接在这设置。你也可以修改 excel.php 配置项中的缓存大小,适当调整。
b. 首先你得需要知道 celldata 是一个二维数组,并且二维数组中的每一个一维数组必须是索引数组才行,这样格式上才能正确。
所以,我对我查询出的 $celldata 先进行了 toarray() 转化操作。然后我让你看下查询出的结构,因为我们数组表中的每个列都是一个字段,所以决定了一维数组是关联数组,需要去键处理。
for 循环处理后就是:
如果你要导出 csv 或者 xlsx 文件,只需将 export 方法中的参数改成 csv 或 xlsx 即可。也可以进行连贯操作直接将导出的文件直接保存到服务器上。
使用 store 方法:
excel::create('用户信息',function($excel) use ($celldata){ $excel->sheet('score', function($sheet) use ($celldata){ $sheet->rows($celldata); }); })->store('xls')->export('xls');
导入 excel 文件
导入我们可以直接用第一步注册的门面 excel 门面上的 load 方法
public function import(request $request) { if(!$request->hasfile('question_file')){ exit(' 操作有误,请重新上传!'); } $file = $_files; $excel_file_path = $file['question_file']['tmp_name']; excel::load($excel_file_path, function($reader) { $data = $reader->toarray(); $question_data = []; foreach($data[0] as $key=>$val){ if(($val['tx']) == 2){ $option = ['a'=>$val['a'],'b'=>$val['b']]; }else{ $option = ['a'=>$val['a'],'b'=>$val['b'],'c'=>$val['c']]; } $question_data[] =[ 'cid' =>intval($val['cid']), //用取整函数 intval(11.0) 结果:11 'title' => $val['title'], 'option' => serialize($option), 'answer' => $val['answer'], 'score' => intval($val['score']), 'status' =>intval($val['status']), 'time' =>time(), 'tx' =>intval($val['tx']) ]; } dd($question_data); }); }
以上代码是我在本地环境做测试时写的,功能虽然实现了但是写得不够严谨,未做任何数据验证!
foreach 循环处理后就是:
参考文章:
laravel excel 实现 excel/csv 文件导入导出功能:
在laravel5中使用laravelexcel实现excel/csv文件导入导出功能(phpexcel):
http://blog.023xs.cn/article/52
上一篇: 日本开发出用于人工智能深度学习的脑型芯片
下一篇: 泡脚的好处 冬天用艾叶泡脚的好处
推荐阅读
-
java实现CSV文件导入与导出功能
-
Laravel Excel 实现 Excel-CSV 文件导入导出功能
-
java使用POI实现excel文件的导入和导出(通用方法)
-
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
-
Easypoi实现excel多sheet表导入导出功能
-
Java Hutool工具实现验证码生成及Excel文件的导入和导出
-
vue项目中导出Excel文件功能的前端代码实现
-
java实现CSV文件导入与导出功能
-
【代码实现】PHP导入Excel和导出数据为Excel文件
-
Laravel Excel 实现 Excel-CSV 文件导入导出功能