您的位置:首页 > 编程语言 > PHP开发

php导出excel

2015-10-11 23:39 633 查看

php导出excel

前言

最近在用php写web程序,其中涉及到导出excel。
google之后,得到两种方法:

使用PHPExcel导出Excel。

正常输出html页面,将数据放在table里面,然后将下载时的content-type和文件后缀设置为excel对应的格式。

具体到上面两种方法如何实现,网上讲的很多,就不具体说明了。
讲一下遇到的问题。

使用PHPExcel遇到的问题

最开始是使用PHPExcel来做的。这东西确实很庞大,1.8版的整个文件夹大概有4M了。
用它来导excel遇到了一个问题,报错:
PHP Fatal error: Out of memory (allocated 1293942784)....
.大意就是内存不够用。

我要导出的数据大概有3000行60列。网上查了一下,就是内存爆掉了。有一些解决方案,可参考phpExcel大数据量情况下内存溢出解决,PHPExcel解决内存占用过大问题-设置单元格对象缓存.

但最终我决定放弃PHPExcel,因为导出速度太慢,不仅是耗内存,估计也耗CPU。点完导出,要等1分钟才开始下载。

使用HTML格式导出Excel的问题

然后开始尝试使用HTML强转Excel的方案。这个方案,无需引入第三方库,使用简单(会html就行),并且导出速度飞快,纯粹就是加载页面,速度肯定快了。但是也遇到了问题。

第一个问题,导出的长数值被显示成了科学计数法(比如
440106187110191850
显示为
4.40106E+17
),而不是文本。如果用PHPExcel的话可以指定单元格的类型,html怎么办呢?

继续google了一下,有两个解决方案:

<td>
使用css样式
mso-number-format: "\@";
,比如
<td style='mso-number-format: "\@";'>440106187110191850</td>


<td>
中的数据之前面加特殊符号
,比如
<td>​440106187110191850</td>


针对两种方案进行测试,发现第二种方式导出的文件使用excel打开速度很慢。所以采用了第一种。

第二个问题,导出文件太大。

原来使用PHPExcel导出3000行60列的数据,
xls
文件大小在
2M
左右。现在使用html导出,文件大小达到了
10M

细想一下,使用html导出,导出的其实就是html的文本文件,文件大其实就是文本内容太多。于是开始进行优化:

使用css的class来设定样式,不再使用style。

消灭空白字符,主要是导出模板中的空格和换行。

优化之后,文件大小迅速下降到了
2.5M
左右。

总结

PHPExcel适用于需要对导出的excel做复杂的样式定制的场合,就是有很多的api可以给你用,来设定不同的格式,但是比较耗资源。

html形式来导出excel的做法适合仅仅需要快速导出,对样式要求不高的场合,特点轻量,易用。唯一不好的是,这种方式导出的文件在使用excel软件打开时会提示格式不正确之类的,不过
点击确认继续打开
就好了。

end。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php excel html