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。
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- 使用Python生成Excel格式的图片
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- 在Windows 8.1的IE 11中屏蔽双击放大功能
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- 通过Mootools 1.2来操纵HTML DOM元素
- WEB标准网页布局中尽量不要使用的HTML标签
- Flash 与 html 的一些实用技巧
- html工作中表格<tbody>标签的使用技巧