php excel csv导入,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 控制器名称

导出方法:

namespace App\Http\Controllers\Member;useApp\Http\Controllers\BaseController;useApp\Model\Member\MemberFollow;useIlluminate\Http\Request;useIlluminate\Database\QueryException;useExcel;class MemberController extendsBaseController

{/**

*

* Excel导出*/

public functionexport()

{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

}//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() 转化操作。然后我让你看下查询出的结构,因为我们数组表中的每个列都是一个字段,所以决定了一维数组是关联数组,需要去键处理。

c7d5a4011484be8d2a5a2ab9b1c384cc.png

for 循环处理后就是:

09cab860b48383a0f969d6143648c1dc.png

如果你要导出 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);

});

}

以上代码是我在本地环境做测试时写的,功能虽然实现了但是写得不够严谨,未做任何数据验证!

2d32d693dbaaa10dbaf7403e09e6cf86.png

foreach 循环处理后就是:

f5ce3736f32d5cc1f3499bcf2fcf686a.png

参考文章:

Laravel Excel 实现 Excel/CSV 文件导入导出功能:

在Laravel5中使用LaravelExcel实现Excel/CSV文件导入导出功能(PHPExcel):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值