Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的很是方便。 php
它的 Github 地址是:https://github.com/Maatwebsite/Laravel-Excel git
安装github
咱们就按照GIthub上的readme文件进行安装吧。web
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 文件 ,大概的配置项,主要就是缓存,表单,和导入,导出的一些设置。app
导出文件composer
我待会直接拿个人测试代码进行展现,不过在这以前你须要一条路由和一个控制器(一个导出方法)框架
//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 文件导入导出功能:
https://blog.csdn.net/gu_wen_jie/article/details/79296470
在Laravel5中使用LaravelExcel实现Excel/CSV文件导入导出功能(PHPExcel):