laravel 数据导出
支持:php 7.0 以上
三种方案总结介绍:
第一种:最简单且不会有长久隐患。但不适合数据量多
第二种: 适合中等数据量,不会有长久隐患。但导出时极占内存
第三种:适合大量数据,不会占据大量内存。但响应时间长,且excel文件生成后需自己逐渐删除,否则会导致生成的文件过多,会产生长久隐患
第一种方案:少量数据导出
 1.下载 composer require maatwebsite/excel        (版本在3.0以上,建议直接最新版本)
		2.注册(app.php中)
   'providers' => [
					    Maatwebsite\Excel\ExcelServiceProvider::class,
				  ]
				,
				  'aliases' => [
					    'Excel' => Maatwebsite\Excel\Facades\Excel::class,
				  ]
		3.提取出配置文件  php artisan vendor:publish
		4.用法
		   a.创建export类  例:php artisan make:export MembersExport
		   b.在MembersExport 中继承
			      FromArray,  //从数组中导出
			      WithStrictNullComparison,  //严格数据类型
使用 Exportable trait类 //实现下载和保存
并分别实现array():array 方法 和 title(): string 方法
例:MembersExport中 的写法
namespace App\Exports; use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\WithTitle; class MembersExport implements FromArray,WithStrictNullComparison,WithTitle
{
use Exportable;
protected $data=[];
protected $sheetname='';
public function __construct($data,$title)
{
$this->data=$data;
$this->sheetname=$title;
} public function array(): array
{
return $this->data;
}
//这是多页脚使用的方法,该方案无需用到
public function title(): string
{
return "sheet".$this->sheetname;
}
}
  c.控制器中使用
			  $excelmode=new MembersExport($data,$title);
			  return $excelmode->download($filename,\Maatwebsite\Excel\Excel::XLSX);
第二种方案:中量数据导出 (1000-10000)(原理:excel多脚页)
		  1.新建multyExport类  例: php artisan make:export MultyExport
		  2.继承WithMultipleSheets类 
		  3.类中添加一个新建脚页的方法  addsheet($data,$sheetname,$exportmodel)
			  例:
			    
namespace App\Exports; use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithMultipleSheets; class MutipleExport implements WithMultipleSheets
{
use Exportable; protected $sheetdata=[]; public function sheets(): array
{
return $this->sheetdata;
} public function addsheet($data,$title,$model){
$this->sheetdata[]=new $model($data,$title);
return $this;
}
}
  4.在 导出的类 中 如MemberExport 将该类继承WithTitle接口类
			    并实现方法 (第一种方案中已写)
			    public function title(): string
			    {
				      return "sheet".$this->sheetname;
			    }
		  5.控制器中用法
			    
//导出多脚页实现页面
public function exportmulty(Request $request){
$all=$request->except('_token','_method');
//dd($all);
$excelmodel=new MutipleExport();
$chunksize=config('excel.exports.chunk_size');
try{
$data=Members::where('status','=',1)->chunk($chunksize,function($list) use($excelmodel){
$key=date('YmdHis').mt_rand(10000,99999);
$list=json_decode(json_encode($list),true); //将集合转化为数组
$excelmodel->addsheet($list,$key,'App\Exports\MembersExport'); //添加excel页脚
});
$filename=date('Y_m_d_H_i_s').md5(date('YmdHis').mt_rand(10000,99999)).'.xlsx'; //随机生成文件名
$excelmodel->store($filename,'excel',Excel::XLSX); //先保存为文件, 参数顺序依次为 文件名称和路径 filesystems.php配置文件中自定义配置(参考public) 生成文件后缀
$filepath=storage_path('app/public/excel/'.$filename); //已经保存的文件名及路径
if(file_exists($filepath)){
return response()->download($filepath,'ceshi.xlsx')->deleteFileAfterSend(true); //下载并删除
}else{
return response("请重试");
}
}catch (\Exception $exception){
return response("请重试");
}
}
第三种方案:大量数据导出  (10000以上) (原理:保存为多个文件,压缩后下载)
		  1.下载zipper插件    composer require  chumper/zipper
		  2.注册  'providers' => [
					    \Chumper\Zipper\ZipperServiceProvider::class
				  ],
				  'aliases' => [
					    'Zipper'=>\Chumper\Zipper\Facades\Zipper::class
				  ]
		  3.控制器中使用
		     例:
    
//导出压缩包实现页面
public function exportzip(Request $request){
$all=$request->except('_token','_method'); $zip=storage_path('app/public/excel.zip'); //设定一个压缩包
$zipper=Zipper::make($zip); //打开或生成设定的压缩包
$chunksize=config('excel.exports.chunk_size');
try{
$data=Members::where('status','=',1)->chunk($chunksize,function($list) use($zipper){ //分批处理
$key=date('YmdHis').mt_rand(10000,99999);
$list=json_decode(json_encode($list),true);
$excelmodel=new MembersExport($list,$key);
$filename=md5(date('YmdHis').mt_rand(10000,99999)).'.xlsx';
$res=$excelmodel->store($filename,'excel',Excel::XLSX); //先保存为excel文件
if($res){
$zipper->add('storage/excel/'.$filename); //添加到压缩包中
}else{
$excelmodel->store($filename,'excel',Excel::XLSX);
$zipper->add('storage/excel/'.$filename);
}
});
$zipper->close(); //关闭压缩包
if(file_exists($zip)){
return response()->download($zip,'ceshi.zip')->deleteFileAfterSend(true); //下载后删除
}else{
return response("请重试");
}
}catch (\Exception $exception){
return response("请重试");
}
}
laravel 数据导出的更多相关文章
- [django]数据导出excel升级强化版(很强大!)
		
不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
 - 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出
		
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
 - mssqlserver数据导出到另外一个数据库
		
mssqlserver数据导出到另外一个数据库 准备源数据库,找到想要导出的数据库,右键选择"任务"再选择"导出数据" 设置源数据库信息 3.设置目标数据库,导 ...
 - 在SQL Server中将数据导出为XML和Json
		
有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...
 - Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
		
Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般 ...
 - pb将datawindow数据导出EXCEL
		
PB有dw有自带功能可以将数据导出成excel,但是head却是字段名称,这样不直观. 所见即所得的方式是,将dw保存成html然后将后缀名改成xls,但这样的方式还有些问题就是会错列,解决的方法是将 ...
 - 百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里?
		
好多人在问:如何将百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里? 现在,很多人都在网络上找商家,联系业务. 百度地图里有很多的商家联系 ...
 - 数据导出Excel中文乱码
		
数据导出到EXCEL提供用户下载,当记录数大于5行时不会出现乱码.但只要不退出Excel,再删除除记录,当记录数小于5行时,导出也不会出现乱码.当然一旦退出Excel再导出就会出现乱码了. 可以试试 ...
 - sqlserver 2008 数据库表结构脚本及数据导出
		
sqlserver2008 在xp上尝试安装了 sqlserver2008 express版本,但是和公司的sqlserver2008 r2 版本不兼容.升级的时候,出了问题.所以换了中思路,将数据 ...
 
随机推荐
- poj2229【完全背包-规律Orz...】
			
挑战DP 题意: 被组合数只能是2的整数幂,然后给出一个数问有多少种组合(mod1e10): 思路: 完全背包做啊-还是蛮简单的-(这里取膜要改成加法,省时间-) dp[i]代表对于j的方案数 贴一发 ...
 - parse.urljoin
			
parse.urljoin(former,later): 用former的域名拼接later的路径,如果later有域名,则进行忽略
 - hdu1879   继续畅通工程   基础最小生成树
			
#include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> u ...
 - .Net开发人员必备工具下载
			
.Net开发人员必备工具下载 本人亲测下载地址: Win8.1破解工具下载: http://pan.baidu.com/s/1eQf2UiQ 可激活版本 Windows Vista Busines ...
 - Palindromes in a Tree CodeForces - 914E
			
https://vjudge.net/problem/CodeForces-914E 点分就没一道不卡常的? 卡常记录: 1.把不知道为什么设的(unordered_map)s换成了(int[])s ...
 - SPRING-BOOT系列之SpringBoot快速入门
			
今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...
 - [BZOJ1050][HAOI2006]旅行comf 枚举+并查集
			
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1050 将边排序,枚举边权最小的边,依次加边直到S和T连通,更新答案. #include&l ...
 - BZOJ3083: 遥远的国度(树链剖分)
			
题意 $n$个节点的树,每个点有权值,支持三种操作 1. 换根 2.把$x$到$y$路径上节点权值变为$z$ 3.询问路径最小值 Sol 啥?你说这是TopTree的裸题?那你写去啊 很显然,如果没有 ...
 - 微信小程序开发系列教程三:微信小程序的调试方法
			
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 这个教程的前两篇文章,介绍了如何用下图所示的微信开发者工具自动生成一个Hel ...
 - (译)IOS block编程指南 1 介绍
			
Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to stan ...