转发:https://blog.csdn.net/gu_wen_jie/article/details/79296470php
版本:laravel5laravel
php 5.6web
安装步骤:数组
1、安装插件缓存
①、首先在Laravel项目根目录下使用Composer安装依赖:服务器
composer require "maatwebsite/excel:~2.1.0"app
②、在config/app.php中注册服务提供者到providers数组:composer
Maatwebsite\Excel\ExcelServiceProvider::class,ide
③、在config/app.php中注册门面到aliases数组:ui
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
④、建议你生成Laravel Excel的配置文件,使用以下命令:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
而后你会发如今config目录下有一个excel.php文件
你能够打开看一下大概的配置项,主要就是缓存,表单,和导入,导出的一些设置。
2、使用
①、建立路由:
//Excel导出 Route::get('/excel/export','Member\MemberController@export')->name('/excel/export');
//Excel导入 Route::get('/excel/import','Member\MemberController@import')->name('/excel/import');
1-一、导出的方法:
<?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]); $cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]); } //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循环处理后就是:
for循环中的另外一个
php
$cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]);
这个地方是比较坑的一个地,由于Excel单元格当你的导出数据中某个列的某个值第一个字符是等号“=”,他就会进行计算处理,而后就报错了。好比我处处的某个昵称是“=阳光”,我就吧等号匹配替换为空格加等号了
其实本不须要进行匹配替换的,由于在excel.php文件中有配置项,可是我配置了并不生效,后续找到更好的解决方法会及时更新,或者有哪位知道了能够指点一下。
/* |-------------------------------------------------------------------------- | Calculate |-------------------------------------------------------------------------- | | By default cells with formulas will be calculated. | */ 'calculate' => false, --------------------- 做者:谷谷谷 来源:CSDN 原文:https://blog.csdn.net/gu_wen_jie/article/details/79296470?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文连接!
默认状况下,计算公式的单元格将被计算。我设置为false没生效。因此匹配替换。
若是你要导出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'); --------------------- 做者:谷谷谷 来源:CSDN 原文:https://blog.csdn.net/gu_wen_jie/article/details/79296470?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文连接!
ok,导出完成。
2-1 导入:
导入咱们能够直接用第一步注册的门面Excel门面上的load方法
/** * * Excel导入 */ public function import(){ $filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '用户信息').'.xls'; Excel::load($filePath, function($reader) { $data = $reader->all(); dd($data); }); }
ok,导入完成。