2021年5月28日19:29:20

xlswriter 中文官方网站 https://xlswriter-docs.viest.me/zh-cn

windows10 环境laravel8 mysql8

第一次执行会慢一点,第二次就更快一点,服务器上开了opcache估计会更快一点

public function test(Request $request){$start_time = date('Y-m-d H:i:s');ini_set('memory_limit', '1024m');$config = ['path' => public_path() . '/upload' // xlsx文件保存路径];$excel = new Excel($config);$textFile = $excel->fileName("free.xlsx")->header(['id', 'name', 'phone', 'source', 'province_name', 'city_name', 'data_time', 'user_id', 'user_nickname', 'register_time', 'up_user_id', 'store_name', 'is_pull_new']);//大约11万数据foreach (BrokerMemberData::get() as $k => $v) {$textFile->insertText($k+1, 0, $v->id);$textFile->insertText($k+1, 1, $v->name);$textFile->insertText($k+1, 2, $v->phone);$textFile->insertText($k+1, 3, $v->source);$textFile->insertText($k+1, 4, $v->province_name);$textFile->insertText($k+1, 5, $v->city_name);$textFile->insertText($k+1, 6, $v->data_time);$textFile->insertText($k+1, 7, $v->user_id);$textFile->insertText($k+1, 8, $v->user_nickname);$textFile->insertText($k+1, 9, $v->register_time);$textFile->insertText($k+1, 10, $v->up_user_id);$textFile->insertText($k+1, 11, $v->store_name);$textFile->insertText($k+1, 12, $v->is_pull_new);}$filePath = $textFile->output();p(BrokerMemberData::count());p('执行成功 开始时间' . $start_time . '结束时间' . date('Y-m-d H:i:s'));p($filePath);}

执行结果

115135
执行成功 开始时间2021-05-29 10:45:04结束时间2021-05-29 10:45:10
D:\phpstudy_pro\WWW\mc\public/upload/free.xlsx


orm里面使用
     BrokerMemberData::where('id', '>', 0)->chunkById(10000, function ($list) use ($textFile) {foreach ($list as $k => $v) {$textFile->insertText($v->id + 1, 0, $v->id);$textFile->insertText($v->id + 1, 1, $v->name);$textFile->insertText($v->id + 1, 2, $v->phone);$textFile->insertText($v->id + 1, 3, $v->source);$textFile->insertText($v->id + 1, 4, $v->province_name);$textFile->insertText($v->id + 1, 5, $v->city_name);$textFile->insertText($v->id + 1, 6, $v->data_time);$textFile->insertText($v->id + 1, 7, $v->user_id);$textFile->insertText($v->id + 1, 8, $v->user_nickname);$textFile->insertText($v->id + 1, 9, $v->register_time);$textFile->insertText($v->id + 1, 10, $v->up_user_id);$textFile->insertText($v->id + 1, 11, $v->store_name);$textFile->insertText($v->id + 1, 12, $v->is_pull_new);
//                pp($textFile);
//                p($t++);}});




每次跑20000D:\phpstudy_pro\WWW\mc>php artisan Zx
初始: 17.759658813477MB
<pre>115135</pre><pre>执行成功 开始时间2021-05-29 19:09:18结束时间2021-05-29 19:09:34</pre><pre>D:\phpstudy_pro\WWW\mc\public/upload/free.xlsx</pre>释放: 19.283096313477MB
峰值: 53.145240783691MB
15000
D:\phpstudy_pro\WWW\mc>php artisan Zx
初始: 17.759658813477MB
<pre>115135</pre><pre>执行成功 开始时间2021-05-29 19:09:53结束时间2021-05-29 19:10:08</pre><pre>D:\phpstudy_pro\WWW\mc\public/upload/free.xlsx</pre>释放: 19.287315368652MB
峰值: 37.001892089844MB
8000
D:\phpstudy_pro\WWW\mc>php artisan Zx
初始: 17.759658813477MB
<pre>115135</pre><pre>执行成功 开始时间2021-05-29 19:10:26结束时间2021-05-29 19:10:46</pre><pre>D:\phpstudy_pro\WWW\mc\public/upload/free.xlsx</pre>释放: 19.13597869873MB
峰值: 20.823844909668MB
10000
D:\phpstudy_pro\WWW\mc>php artisan Zx
初始: 17.759658813477MB
<pre>115135</pre><pre>执行成功 开始时间2021-05-29 19:10:56结束时间2021-05-29 19:11:11</pre><pre>D:\phpstudy_pro\WWW\mc\public/upload/free.xlsx</pre>释放: 19.285507202148MB
峰值: 42.986419677734MB

其他方案:

1,csv , 不段的刷新缓冲期,来实现大数据流的导出
$fp = fopen('php://output', 'a');// 输出Excel列名信息
$head = array("电子邮件");
foreach ($head as $i => $v) {// CSV的Excel支持GBK编码,一定要转换,否则乱码$head[$i] = iconv('utf-8', 'gbk', $v);
}// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;// 逐行取出数据,不浪费内存
$count = count($email);for($t=0;$t<$count;$t++) {$cnt ++;if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题ob_flush();flush();$cnt = 0;}$row[] = $email[$t];foreach ($row as $i => $v) {$row[$i] = iconv('utf-8', 'gbk', $v);}fputcsv($fp, $row);unset($row);
}

这种方案对待简单的excel是可行的,但是需要制作复杂的excel就无能为力

2,导出操作,不经过php,而是直接交给sql做,使用sql自带的导出功能即可。
SELECT*
FROMtable_name
INTO OUTFILE 'D:/test.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';SELECT * FROM data_international into outfile
'd:/zx.xls';受影响的行: 436593
时间: 0.523sTRUNCATE TABLE data_international;<br>
LOAD DATA INFILE
'd:/zx.xls'
INTO TABLE data_international;受影响的行: 436593
时间: 2.453s
复杂一些的sql参考
https://www.cnblogs.com/zx-admin/p/5174796.html

3,异步任务

吧excel导出的任务,写入到一个队列,这个可以是redis的队列,也可以是mq的生产队列,

然后写一个消费队列是消费,在cli模式下执行不担心请求超时,然后执行完成,写消息返回给用,可以使用socket通知用户,也可以写一条mysql记录,告诉用户下载地址

很多需要大数量导出的系统都是采用这个方案

但是这个方案有个缺点就是海量数据导出很容易,内存溢出

4,数据流,边刷出文件流,边提供下下载,还是容易超时

5,分文件拆分处理生成 file1.xls,file2.xls,file3.xls,然后合并,减少内存和处问题,但是这个依然会出现硬盘和内存飙升

6,

PHP海量excel数据导出方案解决 xlswriter性能测试相关推荐

  1. 利用ajax实现excel报表导出(解决乱码问题)

    利用ajax实现excel报表导出[解决乱码问题] 背景 第一版 主要代码 测试结果 第二版 主要代码 测试结果 总结 背景 项目中遇到一个场景,要导出一个excel报表.由于需要token验证,所以 ...

  2. mac r 导出csv文件_mac系统中的Excel数据导出

    最近自己正在练习写一个类似通讯录的App.所有联系人的通讯信息存在一个Excel的文件当中,如下图所示 Snip20160903_1.png 如果要在iOS中使用上面的数据,就需要将Excel中的数据 ...

  3. Excel数据导出图片

    表格数据导出图片 pom.xml引入Spire配置 <!-- Excel转换工具 参考 https://www.e-iceblue.cn/licensing/install-spirepdf-f ...

  4. xlsxwriter进度条php,PHP导出Excel数据导出,前端进度条实现方式

    效果如上,结合layer组件以及ajax分页实现,具体代码如下 前端代码 用户数据导出 // 执行事件 function exportData() { var loading = layer.load ...

  5. 微信公众号自动回复服务器数据,[终极方案]解决微信公众号服务器配置启用后无法自动回...

    在配置服务器配置时Token验证通过后,遇到给公众号发信息,提示:提示该公众号提供的服务出现故障,请稍后再试 的问题,一直实现不了自动回复的功能.百度了大量的资料,参考了开发文档,尝试了n种办法,检查 ...

  6. Dcat-Admin自定义Excel数据导出

    dact-admin框架支持导出 csv. xlsx 和 ods 等格式文件,在控制器内grid−>export()−>titles(grid->export()->title ...

  7. springboot新手项目从零开始搭建,涉及excel数据导出和邮箱发送(上)

    项目创建 idea点击New Project 创建一个新项目 左上角打开点击File打开设置 maven设置 这样 我们的项目就创建完毕了 点开左边的pom文档 将提供的依赖导入 我之前就存在一个冲突 ...

  8. 分分钟搞定 Excel 数据导出

    1. 概览 数据导出是日常开发的常见功能,及将数据导出为Excel并提供下载.Java 生态存在大量的 Excel 操作类库,基于这些类库便可完成相关功能.这样,大量繁杂.无意义的代码耗费着宝贵的人力 ...

  9. java使用poi的excel数据导出及线上预览

    工作中经常会遇到需要从数据库中获取数据,整理后导出数据到excel中提供其他人员下载或者查看,整体功能并不复杂,今天提供一个基于poi工具+永中云预览的excel通用导出在线查看的方法 maven依赖 ...

最新文章

  1. PHP使用BC Math 函数处理浮点运算问题
  2. Ubuntu 下添加OpenERP command 快捷启动方式
  3. cocos2d-x 帧动画学习
  4. 让时间倒流的保存点:用Apache Flink的保存点技术重新处理数据流
  5. NIO 之 Channel实现原理
  6. QT的QActionGroup类的使用
  7. docker中创建redis及在外部使用rdm连接
  8. 《转》请放下你的无效社交
  9. CSS清除默认样式,技术详细介绍
  10. 无人驾驶出租车遭警察拦截后欲“潜逃”,AI 是原罪?
  11. python作业atm_python完成ATM(分目录)
  12. Presto架构及原理、安装及部署
  13. 【历史上的今天】8月19日:大型计算机先驱和小型机之父诞生;中国雅虎邮箱成历史...
  14. nmap隐藏自己扫描
  15. Win10禁用UAC(用户账户控制)
  16. 物联网医疗康复AI软件项目找团队合作
  17. 朴素贝叶斯——凉鞋问题
  18. <!DOCTYPE html>是什么意思?
  19. dns配置异常怎么修复_win10 dns异常怎么修复
  20. nas存储如何做远程服务器数据备份_NAS存储与数据备份方案

热门文章

  1. php+拆分gif,PHP批量下载五笔字根拆分解GIF图
  2. JavaScript:回调函数(callback)
  3. ubuntu桌面图标消失
  4. D. Absolute Sorting
  5. ArcGIS处理多维栅格NC格式的全球土壤数据集
  6. 如何绘制产业招商地图
  7. TI Sitara AM57x DSP+ARM + Xilinx Artix-7 FPGA开发板 规格书资料
  8. Java 加解密技术之 MD5
  9. 举例 | 轻松读懂“实验”与“试验”的区别
  10. 杭电ACM 1089-1096