前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻松解决PHPExcel导出10W行超时和内存溢出问题

轻松解决PHPExcel导出10W行超时和内存溢出问题

作者头像
php007
发布2019-08-05 15:05:16
3.5K1
发布2019-08-05 15:05:16
举报
文章被收录于专栏:PHP专享栏PHP专享栏

专题1:PHPExcel的疑难杂症各个击破

本文使用了一个轻量级的PHP的Excel操作库-PHP_XLSXWriter

一.解决行的问题

  • 10w行excel数据导出仅需要5.26秒,再也不用担心excel导出超过1w行就超时(php.ini中的maxexecutiontime)
  • 内存栈溢出,使用过PHPExcel的同学应该清楚,导出的文件行还没到1w行就报错了,原因是单个PHP进程超过了 php.ini配置的memory_limit
  • 解决了csv导出时样式丢失,长数字变成科学计数法的问题,乱码的问题
代码语言:javascript
复制
<?php
#使用轻量级的excel操作库PHP_XLSXWriter
$timeStart = microtime(true);
require_once __DIR__."/../PHP_XLSXWriter/vendor/autoload.php";

$writer = new XLSXWriter();
$sheetHeader = [
    '商品id'=>'string',
    '库存量'=>'string',
    '单价'=>'string',
    '名称'=>'string',
    '卖家联系电话'=>'string'//长数字再也不用担心会变成科学计数法了
];

$writer->writeSheetHeader('Sheet1',  $sheetHeader);//optional
for($i=0; $i<100000; $i++)
{
    $s1 = $i+1;
    $s2 = mt_rand(0,1000);
    $s3 = mt_rand(100,999)/10;
    $s4 = "商品".$s1;
    $s5 = "13713147601";//随便输入的
    $writer->writeSheetRow('Sheet1', array($s1, $s2, $s3, $s4, $s5) );
}
$writer->writeToFile('goods_info.xlsx');
echo floor((memory_get_peak_usage())/1024/1024)."MB";
echo "";
echo microtime(true) -$timeStart;

源码地址:https://gitee.com/nodestudy/The-PHP-Best-Practice

文件目录结构:

一.解决列的问题

最近有个需求,THINKPHP3.2中对数据进行导出,数据一共有43项,导出时候就会抱错 Invalid cell coordinate [1

因为phpexcel 的cell.php里默认就设置了26列,而且判断方法里默认从a-z然后下一个列就是aa1了 ,而实际上在excel里z后面应该是AA,AB,AC,AD,AE,AF这样 所以需要改判断方法,我之前写过一篇excel的导出,只需要吧其中一个方法改动一下,改动的思想就是 当超过26列的时候 下一列命名应该是AA,AB,而不是 aa1,AA2,改进方法如下

1、将列的字母转成数字序号使用,代码如下:

代码语言:javascript
复制
$phpExcel = new PHPExcel();
//$array需要导出的数组
foreach($array as $k => $value){
$title_col = PHPExcel_Cell::stringFromColumnIndex($k); // 从0开始 A-Z,AA,AB...
$phpExcel->getActiveSheet()->setCellValue($title_col."1",$value);//标题行  A1-Z1,AA1,AB1...
}

2、将列的数字序号转成字母使用,代码如下:

代码语言:javascript
复制
PHPExcel_Cell::columnIndexFromString('AA');
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 风帆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文使用了一个轻量级的PHP的Excel操作库-PHP_XLSXWriter
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档