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 文件导入导出功能:
https://blog.csdn.net/gu_wen_jie/article/details/79296470
在Laravel5中使用LaravelExcel实现Excel/CSV文件导入导出功能(PHPExcel):
http://blog.023xs.cn/Article/52
Laravel Excel 实现 Excel-CSV 文件导入导出功能的更多相关文章
- Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...
- 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 ...
- 【Laravel】使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
一.安装配置 使用Composer安装依赖: composer require maatwebsite/excel 发布配置(可选): php artisan vendor:publish --pro ...
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...
- CSV文件导入导出MySQL
使用SQLyog 工具导入文件数据到MySQL: Excel文件导入导出: 需要驱动:Microsoft Office 2007驱动 导入需要注意的问题:1.Excel里数值列,默认导入会变成浮点型. ...
- MySql csv文件导入导出
一.导出到csv(本地导出) 通过mysql客户端shell连接到服务器,选择使用的数据库,输入sql代码: select * from test_info into outfile '/tmp/te ...
- MongoDB csv文件导入导出
1.导出到csv文件: 2.从csv导入: 数据经过csv导出导入,有一个非常隐蔽的问题,编写代码时需要注意: 先导入一条数据: 其中Price是double类型: 然后我把该条记录导出到Demo.c ...
- 【转】Java操作CSV文件导入导出
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 按照TYPE的文件导入导出功能
/** * 导入文件Action;*/private File excelFile;// 保存原始文件名private String excelFileFileName;// 保存原始文件名priva ...
随机推荐
- gc笔记(转)
GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...
- ubuntu 16.04卸载不必要默认安装软件
两个办法,一个在ubuntu软件里一个一个删,明显的windows下做法. 还有一个通过终端来删除.ctrl+alt+t打开终端. 1.卸载libreoffices(要删一起删了,然后去装office ...
- 安卓开发学习笔记(七):仿写腾讯QQ登录注册界面
这段代码的关键主要是在我们的相对布局以及线性布局上面,我们首先在总体布局里设置为线性布局,然后再在里面设置为相对布局,这是一个十分常见的XML布局模式. 废话不多说,直接上代码:一.activity. ...
- Servlet, Struts2和SpringMVC 并发访问线程安全问题
第一部分: Servlet不是线程安全的. 要解释Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的. 当Tomcat接收到Client的HTTP ...
- win7系统下dos界面无法自由调整大小
刚开始在win7系统,在dos界面下做MySQL的实验,很多数据不能显示界面上,只能显示固定的大小,以为这是系统的原因,后来在网上查找了一些资料.终于发现可以自由调节dos界面大小的方法.下面给出截图 ...
- [Swift]LeetCode118. 杨辉三角 | Pascal's Triangle
Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. In Pascal's t ...
- [Swift]LeetCode143. 重排链表 | Reorder List
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You may not mod ...
- C/C++数据在内存中的存储方式
目录 1 内存地址 2 内存空间 在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍. 本文是学 ...
- 推荐一款接口 API 设计神器!
今天栈长给大家推荐一款接口 API 设计神器,传说中的,牛逼哄洪的 Swagger,它到底是什么?今天为大家揭开谜底! Swagger是什么? 官网:https://swagger.io/ Swagg ...
- Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy
爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...