首頁 > 後端開發 > php教程 > 老话题了.PHP导出EXCEL,phpexcel类很强大,但是效率低速度慢,fputcsv速度快但不知道如何解决科学计数法的有关问题,求老司机传授经验

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

WBOY
發布: 2016-06-13 12:06:32
原創
1763 人瀏覽過

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

本帖最后由 anyilaoliu 于 2014-08-20 16:39:12 编辑 如题...

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

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

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

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

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

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

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


------解决思路----------------------
引用:
Quote: 引用:

优化的一种方法:
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 条的时候刷新下缓冲期
<br />$fp = fopen('php://output', 'a');<br /><br />// 输出Excel列名信息<br />$head = array("电子邮件");<br />foreach ($head as $i => $v) {<br />    // CSV的Excel支持GBK编码,一定要转换,否则乱码<br />    $head[$i] = iconv('utf-8', 'gbk', $v);<br />}<br /><br />// 将数据通过fputcsv写到文件句柄<br />fputcsv($fp, $head);<br /><br />// 计数器<br />$cnt = 0;<br />// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小<br />$limit = 100000;<br /><br />// 逐行取出数据,不浪费内存<br />$count = count($email);<br /><br />for($t=0;$t<$count;$t++) {<br /><br />    $cnt ++;<br />    if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题<br />        ob_flush();<br />        flush();<br />        $cnt = 0;<br />    }<br />    $row[] = $email[$t];<br />    foreach ($row as $i => $v) {<br />        $row[$i] = iconv('utf-8', 'gbk', $v);<br />    }<br />    fputcsv($fp, $row);<br />    unset($row);<br />}<br /><br />2.长数字,可以再导出的时候,在前面预加个空格,这个就不以长度计数形式导出,而是以文本形式导出。<br />
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板