在网页应用中我们经常会把数据导出到EXCEL表,之前我一直使用PHPEXCEL作为导出类库,因为它有丰富的EXCEL支持,可以随意调整表格样式。
但在近期有一个25万数据的表需要导出,使用PHPEXCEL导出表格之后里面有很多内容是空的,虽然把数据分成了N个表格,每个表格只装一万数据,但效果还是如下图所示,空了一片。
鉴于对表格样式要求不高,但对数据要求又很严格必须都精确导出的前提下,我选择了 PHP_XLSXWriter。
PHP_XLSXWriter 比 PHPEXCEL更轻量,只需要引用一个类文件即可。
但它对于大批量数据导出的支持却更好。经过测试25万条数据(还是按每个表格放1万条来算),生成26个表格只用不到一分钟。
而且所有数据库中的内容都精确的导出来了,没有任何问题。
在需要导出大批量数据的情况下,建议还是使用 PHP_XLSXWriter,下面我们来看一下它的用法。
你只需要在你的代码中引用 这个CLASS文件即可(这点比PHPEXCEL要省心很多)
引用之后,你只需要创建几个数组,然后使用下面这几行代码就可以生成EXCEL文件
其中 $header 是设置EXCEL的标题,示例代码:
$header = array(
'c1-text'=>'string',//text
'c2-text'=>'@',//text
'c3-integer'=>'integer',
'c4-integer'=>'0',
'c5-price'=>'price',
'c6-price'=>'#,##0.00',//custom
'c7-date'=>'date',
'c8-date'=>'YYYY-MM-DD',
);
你需要定义好你需要的表格列名,列名后面跟上类型即可。
styles1 是这列的样式属性,我们可以通过styles1数组设置这列的 字体 字号 粗细 位置等属性。
$styles1 = array('font'=>'Arial','font-size'=>11,'font-style'=>'bold'
, 'fill'=>'#eee', 'halign'=>'center', 'border'=>'left,right,top,bottom');
$rows 是表格的内容区域,依然是通过数组来定义的,有多少内容就加多少个数组元素即可。
$rows = array(
array('x101',102,103,104,105,106,'2018-01-07','2018-01-08'),
array('x201',202,203,204,205,206,'2018-02-07','2018-02-08'),
array('x301',302,303,304,305,306,'2018-03-07','2018-03-08'),
array('x401',402,403,404,405,406,'2018-04-07','2018-04-08'),
array('x501',502,503,504,505,506,'2018-05-07','2018-05-08'),
array('x601',602,603,604,605,606,'2018-06-07','2018-06-08'),
array('x701',702,703,704,705,706,'2018-07-07','2018-07-08'),
);
$styles2 是定义了一下内容行的高度,注意:这个属性对 header是不起作用的。
$styles2 = array('height'=>18);
有了这些示例属性我们就可以直接用PHP代码创建一个EXCEL文件了。
在实际应用中我们一般都是从数据库中导出数据,所以还需要通过数据库把几个数组生成。
使用 show full columns 的方式把数据表字段都调用出来,然后通过循环的方式把它们push到 header数组中当标题。
把内容都取出来,通过 push方法加到 $rows 数组中,这样就OK了。
再把几个数组放在生成代码处,就可以实现导出数据库内容到EXCEL了。
再看一下 PHP_XLSXWriter 的说明:5万数据 1.4S ,对于追求效率的同学来说这个简直不要太爽了的说。。。