php导出大量数据到excel使用轻量级的PHP_XLSXWriter比用phpexcel效率更高,2020年9月10日实测!

时间:2022-07-26
本文章向大家介绍php导出大量数据到excel使用轻量级的PHP_XLSXWriter比用phpexcel效率更高,2020年9月10日实测!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在网页应用中我们经常会把数据导出到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 ,对于追求效率的同学来说这个简直不要太爽了的说。。。