> 백엔드 개발 > PHP 튜토리얼 > 老话题了.PHP导出EXCEL,phpexcel类很强大,但是效率低速度慢,fputcsv速度快但不知道怎么解决科学计数法的问题,求老司机传授经验

老话题了.PHP导出EXCEL,phpexcel类很强大,但是效率低速度慢,fputcsv速度快但不知道怎么解决科学计数法的问题,求老司机传授经验

WBOY
풀어 주다: 2016-06-23 13:49:17
원래의
3428명이 탐색했습니다.

如题...

导出的数据目前大约4W条  下个月可能有10W条  4W条的情况下最终导出大约20M   因为字段较多所以循环对每一条数据做了一些处理计算, 用PHPEXCEL导出大概3分钟出结果  用php自带的fputcsv大约1分钟出结果,但是因为有身份证和其他超长数字字段, 又会变成科学计数法

用FPUTCSV的时候给每个字段加上\t 可以避免科学计数法  但是在csv文件中每个字段都隐藏了双引号  客户无法接受

用PHPEXCEL可以指定某字段为文本格式  但导出时间太久  客户也无法接受

目前程序循环本身已尽可能优化, 就是导出这里没有办法   希望在以下两个方向的任意一个得到帮助

1. 优化或者简化PHPEXCEL的使用,使其在能满足以上功能的情况下尽可能提高效率

2. 导出CSV可以使长数字不以科学计数法的形式显示,或者指定该列单元格格式为文本

有有效的思路亦可 不胜感激


回复讨论(解决方案)

优化的一种方法:
http://bbs.youyax.com/Content-5058
假设有10000条数据,
分10次导出,每次导出1000条,
这种方法的好处是,可以避免长时间等待,
但是有个问题是好像还是很占用内存,
文件太大依然会报内存不足
原理是:
先导出1000条,
再次读取,定位到第1001行,
继续导出下1000条,
再次读取,定位到2001,
……

优化的一种方法:
http://bbs.youyax.com/Content-5058
假设有10000条数据,
分10次导出,每次导出1000条,
这种方法的好处是,可以避免长时间等待,
但是有个问题是好像还是很占用内存,
文件太大依然会报内存不足
原理是:
先导出1000条,
再次读取,定位到第1001行,
继续导出下1000条,
再次读取,定位到2001,
……




总耗时如果不减少的话意义不是很大~~


优化的一种方法:
http://bbs.youyax.com/Content-5058
假设有10000条数据,
分10次导出,每次导出1000条,
这种方法的好处是,可以避免长时间等待,
但是有个问题是好像还是很占用内存,
文件太大依然会报内存不足
原理是:
先导出1000条,
再次读取,定位到第1001行,
继续导出下1000条,
再次读取,定位到2001,
……




总耗时如果不减少的话意义不是很大~~
把你的方法或代码贴出来看看,研究研究,口说有点不清晰

1.Excel可以支持100万行记录,Excel 2003最大支持65536行,从2007版开始支持104万行,Excel极限是65536条。

参考下:循环生成CSV 数据, 每生成1000 条的时候刷新下缓冲期

$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);}2.长数字,可以再导出的时候,在前面预加个空格,这个就不以长度计数形式导出,而是以文本形式导出。
로그인 후 복사

目前尚无很好的办法,  PHPexcel总是很慢 未能成功优化

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿