加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 19:58:29 所属栏目:大数据 来源:网络整理
导读:Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便。? 它的 Github 地址是:https://github.com/Maatwebsite/Laravel-Excel? 安装 我们就按照GIthub上的readme文件进行安装吧。 composer "m

Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便。?

它的 Github 地址是:https://github.com/Maatwebsite/Laravel-Excel?

安装

我们就按照GIthub上的readme文件进行安装吧。

composer "maatwebsite/excel:~2.1.0"

在?config/app.php?中注册服务提供者到?providers?数组:

MaatwebsiteExcelExcelServiceProvider::,

在?config/app.php?中注册门面到?aliases?数组:

'Excel' => MaatwebsiteExcelFacadesExcel::,

生成?Laravel Excel?的配置文件,使用如下命令:

php artisan vendor:publish --provider="MaatwebsiteExcelExcelServiceProvider"

然后你会发现在?config?目录下有一个?excel.php?文件,大概的配置项,主要就是缓存表单,和导入导出的一些设置。

导出文件

我待会直接拿我的测试代码进行展示,不过在这之前你需要一条路由和一个控制器(一个导出方法)

Route::get('/excel/export','MemberMemberController@export')->name('/excel/export'<span style="color: #008000">//<span style="color: #008000">Excel导入
Route::get('/excel/import','MemberMemberController@import')->name('/excel/import');

创建控制器,可以使用?artisan?命令或者手动创建:

php artisan make:controller 控制器名称

导出方法:

<span style="color: #0000ff">class MemberController <span style="color: #0000ff">extends<span style="color: #000000"> BaseController
{
<span style="color: #008000">/
<span style="color: #008000">

  • Excel导出
    <span style="color: #008000">*/
    <span style="color: #0000ff">public <span style="color: #0000ff">function<span style="color: #000000"> export()
    {
    <span style="color: #008080">ini_set('memory_limit','500M'<span style="color: #000000">);
    <span style="color: #008080">set_time_limit(0);<span style="color: #008000">//<span style="color: #008000">设置超时限制为0分钟
    <span style="color: #800080">$cellData = MemberFollow::select('xt_name','sex','face')->limit(5)->get()-><span style="color: #000000">toArray();
    <span style="color: #800080">$cellData[0] = <span style="color: #0000ff">array('昵称','性别','头像'<span style="color: #000000">);
    <span style="color: #0000ff">for(<span style="color: #800080">$i=0;<span style="color: #800080">$i<<span style="color: #008080">count(<span style="color: #800080">$cellData);<span style="color: #800080">$i++<span style="color: #000000">){
    <span style="color: #800080">$cellData[<span style="color: #800080">$i] = <span style="color: #008080">array_values(<span style="color: #800080">$cellData[<span style="color: #800080">$i<span style="color: #000000">]);
    }
    <span style="color: #008000">//<span style="color: #008000">dd($cellData);
    Excel::create('用户信息',<span style="color: #0000ff">function(<span style="color: #800080">$excel) <span style="color: #0000ff">use (<span style="color: #800080">$cellData<span style="color: #000000">){
    <span style="color: #800080">$excel->sheet('score',<span style="color: #0000ff">function(<span style="color: #800080">$sheet) <span style="color: #0000ff">use (<span style="color: #800080">$cellData<span style="color: #000000">){
    <span style="color: #800080">$sheet->rows(<span style="color: #800080">$cellData<span style="color: #000000">);
    });
    })->export('xls'<span style="color: #000000">);
    <span style="color: #0000ff">die<span style="color: #000000">;
    }
    }

我来对上面的代码进行解释下。?

a.?ini_set 设置内存溢出大小和超时时间是因为我的数据量比较大,不想直接去?php.ini?中修改,所以直接在这设置。你也可以修改?excel.php?配置项中的缓存大小,适当调整。?

b.?首先你得需要知道 cellData 是一个二维数组,并且二维数组中的每一个一维数组必须是索引数组才行,这样格式上才能正确。?

所以,我对我查询出的 $cellData 先进行了?toArray()?转化操作。然后我让你看下查询出的结构,因为我们数组表中的每个列都是一个字段,所以决定了一维数组是关联数组,需要去键处理。?

for 循环处理后就是:?

?

如果你要导出?csv?或者?xlsx?文件,只需将?export?方法中的参数改成 csv 或 xlsx 即可。也可以进行连贯操作直接将导出的文件直接保存到服务器上。?

使用 store 方法:

Excel::create('用户信息',() (->sheet('score',() (->rows(->store('xls')->export('xls');

导入 Excel 文件

导入我们可以直接用第一步注册的门面?Excel?门面上的?load?方法

import(Request (!->hasFile('question_file'(' 操作有误,请重新上传!' = = ['question_file']['tmp_name'Excel::load(<span style="color: #800080">$excel_file_path,<span style="color: #0000ff">function(<span style="color: #800080">$reader<span style="color: #000000">) {
<span style="color: #800080">$data
= <span style="color: #800080">$reader
-><span style="color: #000000">toArray();
<span style="color: #800080">$question_data
=<span style="color: #000000"> [];
<span style="color: #0000ff">foreach
(<span style="color: #800080">$data
[0] <span style="color: #0000ff">as
<span style="color: #800080">$key
=><span style="color: #800080">$val
<span style="color: #000000">){
<span style="color: #0000ff">if((<span style="color: #800080">$val['tx']) == 2<span style="color: #000000">){
<span style="color: #800080">$option = ['A'=><span style="color: #800080">$val['a'],'B'=><span style="color: #800080">$val['b'<span style="color: #000000">]];
}<span style="color: #0000ff">else<span style="color: #000000">{
<span style="color: #800080">$option = ['A'=><span style="color: #800080">$val['a'],'B'=><span style="color: #800080">$val['b'],'C'=><span style="color: #800080">$val['c'<span style="color: #000000">]];
}
<span style="color: #800080">$question_data[] =<span style="color: #000000">[
'cid' =><span style="color: #008080">intval(<span style="color: #800080">$val['cid']),<span style="color: #008000">//<span style="color: #008000">用取整函数 intval(11.0) 结果:11
'title' => <span style="color: #800080">$val['title'],'option' => <span style="color: #008080">serialize(<span style="color: #800080">$option),'answer' => <span style="color: #800080">$val['answer'],'score' => <span style="color: #008080">intval(<span style="color: #800080">$val['score']),'status' =><span style="color: #008080">intval(<span style="color: #800080">$val['status']),'time' =><span style="color: #008080">time(),'tx' =><span style="color: #008080">intval(<span style="color: #800080">$val['tx'<span style="color: #000000">])
];
}
dd(<span style="color: #800080">$question_data<span style="color: #000000">);
});
}

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

?

foreach?循环处理后就是:

?

参考文章:?

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读