导读:大家都知道使用PHPExcel类库或者Laravel Excel 都可以实现 Excel/CSV 文件导入导出功能,但是在实际开发中,实现是一回事,真正应用又是一回事。

上面提到的那两种方式都不适用于1W以上的数据量导出,速度相当慢,甚至很可能由于内存及超时的原因无法实现导出,但是线上实际需求如订单导出等,随便数量都可能达到1w,甚至百w、千w条。

那么,这个时候,我们要实现10w条甚至更大的数据量时,我们就得自己封装方法。

下面直接上代码。


封装好的导出方法
在此控制器中,App\Http\Controllers\ExcelController
你也可以封装到函数库里,此处我偷懒了

/*** [export 在本地导出csv数据]* @param  [type] $cell  [表格字段]* @param  [type] $title [文件名]* @param  [type] $data  [数据]* @return [type]        [description]*/
public function localexport($cell,$title,$data){set_time_limit(0);ini_set('memory_limit', '128M');header('Content-Type: application/vnd.ms-execl');header('Content-Disposition: attachment;filename="'.$title . '.csv"');//以写入追加的方式打开$fp = fopen('php://output', 'a');foreach($cell as $key => $item) {$celldata[$key] = iconv('UTF-8', 'GBK//IGNORE', $item);}//将标题写到标准输出中fputcsv($fp, $celldata);foreach($data as $row){foreach($row as $key => $item) {//这里必须转码,不然会乱码$row[$key] = iconv('UTF-8', 'GBK//IGNORE', $item);}fputcsv($fp, $row);}$res = ['file'=>$title];return response()->json($res);
}

以下是调用导出方法的类内容
此处主要是为了能引入导出方法(localexport)及获取要导出数据的方法(excelFixeddayWxCharge)

1.命名空间

use App\Repositories\DataAnalysis\DataAnalysisRepository;

use App\Http\Controllers\ExcelController;

2.构造方法

protected $DataAnalysis;
protected $excel;public function __construct(DataAnalysisRepository $DataAnalysis,ExcelController $excel) {$this->DataAnalysis = $DataAnalysis;$this->excel = $excel;
}

3.调用导出方法的控制器方法

public function(Request $request){//防止数据量大内存不够ini_set('memory_limit', '256M');//自定义表格字段$cell=['消费标识','订单编号','付款金额','入账金额','支付方式','微信支付订单号','优惠金额','商户标识','设备号','状态','消费时间'];$res = array();$month = $request->input('month','2017-08-01');//自定义导出文件名$title = $request->input('title','8月微信支付充值订单流水明细');//此方法为导出数据来源,在库文件里,你可根据自己需要的数据查数据库$res = $DataAnalysis->excelFixeddayWxCharge($month);$data=[];foreach($res as $k => $v){$data[$k][] = $v->id;//@1此处划重点,在下面进行说明$data[$k][] = "\t".$v->order_sn;$data[$k][] = $v->amount;$data[$k][] = $v->recorded;$data[$k][] = ($v->payment==1)?'微信支付':'其他';$data[$k][] = "\t".$v->payment_sn;$data[$k][] = $v->discount_amount;$data[$k][] = $v->userid;$data[$k][] = $v->mac_id;$data[$k][] = ($v->status==0)?'支付成功':'';$data[$k][] = $v->created_at;}$title = $title.date('YmdHis');$res = $excel->localexport($cell,$title,$data);//导出表格});

注:上文划重点@1处解决长数字显示不全问题

$data[$k][] = "\t".$v->order_sn;

此处为订单号,一般订单号都是很长一串数字组成,如0157339980453950,以0开头也比较常见,那么要导出这么一长串数字到csv文件里,本身是以字串形式导出的,但是使用excel表格打开时会自动转为科学计数法,我们知道excel表格在前面拼接个英文引号 ’ 就可以,但在csv是行不通的,这时候我们只需要在前面拼接 ‘\t’即可,当excel打开它的时候就知道它不是数字列。

Laravel导出大量数据到表格csv及长数字显示不全问题相关推荐

  1. 记账后,快速导出账目数据到表格保存

    可能每个人记账的原因都不同,了解记账的重要性,更了解收支情况.那么如何在记账后,快速将所记账的账目导出表格保存呢?下面教大家一起来试试吧. 在电脑上打开<晨曦记账本>进入到主界面上,功能简 ...

  2. java导出大数据excel表格,导出数据

    常规的java导出excel表格最大的数据量是65535行. package com.sf.module.timeManagement.biz; import java.io.ByteArrayInp ...

  3. php 数组导出csv_php导出百万数据到csv

    先看代码: <?phpset_time_limit(0); // 设置超时ini_set('memory_limit', '100M'); // 设置最大使用的内存header("Co ...

  4. Java导出大批量数据(文件格式篇xls,xlsx,csv)

    根据最近写出的导出方法 打算在文章中记录总结下学习心得 java导出我准备分为三篇文章介绍 分批查询导出篇https://blog.csdn.net/weixin_56567361/article/d ...

  5. layui数据表格中导出所有数据的简易解决办法

    layui数据表格中导出所有数据的简易解决办法 官方文档的困惑 解决办法 官方文档的困惑 首先要说明的是:layui在 table 的工具栏内置了数据导出按钮,如果你是用它内置的导出按钮来导出数据,是 ...

  6. 不用任何 js 库,纯前端导出数据到 Excel / CSV 文件就这么简单几行代码

    最近实现的导出数据为表格的需求,不需要工具库,也不要后端实现,mark 一下. js 导出 excel 表格 最近工作中又遇到了将表格数据导出为 excel 表格的需求,我第一时间想到的是之前我的网站 ...

  7. oracle数据库html导出表格,html数据库导出excel表格数据-关于把数据库数据以表格形式导出...

    关于把数据库数据以表格形式导出 库中的数据导出到excel,以oracle为例: 最简单的方法---用工plsql dev 执行File =>newReport Window .在sql标签中写 ...

  8. Hive导出复杂数据到csv文件

    工作中经常遇到使用Hive导出数据到文本文件供数据分析时使用.Hive导出复杂数据到csv等文本文件时,有时会遇到以下几个问题: 导出的数据只有数据没有列名. 导出的数据比较复杂时,如字符串内包含一些 ...

  9. mysql 导入导出 csv_mysql 导出导入数据 -csv

    MySql数据库导出csv文件命令: mysql> select first_name,last_name,email from account into outfile 'e://output ...

最新文章

  1. GM Tech 2 works with Hummer Yes or No
  2. python编码-python中处理中文编码问题
  3. Node.js 之 新手安装详解 及 npm 配置说明
  4. ITK:创建拉普拉斯内核
  5. arcgis api for js共享干货系列之一自写算法实现地图量算工具
  6. mcq 队列_基于人工智能的智能体能力倾向问答(MCQ) 套装1
  7. HashMap的hash()
  8. linux进程磁盘io监测,系统性能检测--磁盘io
  9. 命运2服务器维修,命运2服务器
  10. 类似print shopmail可变数据生成,排版、拼版实现
  11. 游戏开发入门终极指南(技术资源大合集)
  12. 信息学奥赛一本通C++语言——1129:统计数字字符个数
  13. android画布橡皮,Android绘图实现橡皮擦功能
  14. 软件企业管理——无为而无不为
  15. (神州优车)数据交换平台架构分享
  16. 【转载】魔方教程七步玩转魔方
  17. ElasticSearch及插件安装
  18. 印象笔记不能同步(其他浏览器可以上网,IE不能上网)
  19. Android 自定义折线图实现教程
  20. webInspect SprinBoot2.x安全整改

热门文章

  1. (转)FIKKER和Nginx的反向代理服务功能对比评测报告
  2. python 实现radius认证服务-作为vmware 的双因子认证服务器-实现Horizon外网接入准入控制
  3. 安卓毕业设计- 基于Android的考试管理系统
  4. mysql设置单个表的删除权限_Mysql管理命令-查看,创建用户、赋权、删除表用户数据库等操作...
  5. python基于元组list画图(plot list of tuples)
  6. [EOS源码分析]5.EOS编写HelloWorld智能合约及各种坑
  7. 14-四层, 七层与DNS负载均衡
  8. soapUI-Groovy Script
  9. 二进制与十进制互相转换
  10. 【链环科技】智能家居 未来触手可及