PHPEXCEL数据导出不全 && Excel 2003版总行数65536,总列数256

2个月前 (01-24) wang PHP 0评论 已收录 71℃ 浏览数:49

一、PHPEXCEL数据导出不全

这几天在做数据支持,制作一些数据的报表。在一个需求上遇到了问题。导出使用的工具是PHPEXCEL。导出员工一个月中的工作准确率,大概三四百名员工。结果发现导出来的数据,只有一行,就是标题,而且标题的内容显示不全,大概只有两百个左右,但是应该有三百多。导出其他的数据是没有问题的。

而且比较狗的是,并没有报错的信息。程序就是正常的运行完了,但是导出的Excel数据不对。

当时算了一下,按照三百行算,需要导出一个月的数据,一天一行那么大概有300*30个单元格。大约9000个。每个1k的话,也就需要十几M的内存。但是保险起见,给程序分配了512M内存,再次运行问题依旧。

那么是不是超时?于是设置永不超时,再次运行还是这个问题。

于是去查了查是不是PHPEXCEL不支持大数据的导出?但是看人家说的都是十几万,几十万这种,我这种就三十行的也不算大数据啊!然后花了很多的时间去查资料。终于无意中查到了问题。

【软件限制】 Excel 2003版总行数65536,总列数256。Excel 2007版开始,总行数是1048576,总列数是16384。

//数据填写完毕
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($this->php_excel, 'Excel5');//生成xlsx
$objWriter->save('php://output');

Excel5就是Excel2003,这下就知道怎么回事了。只支持256行,所以第一行超过了最大列数就不再写入了,也不会报错,当然看不到错误信息了。

问题的修改也很简单,改为Excel 2007就可以了。

$objWriter = PHPExcel_IOFactory::createWriter($this->php_excel, 'Excel2007');//生成xlsx

但是很尴尬,报错了。

php fatal error: class 'xmlwriter' not found in

查了查是php的组件没有安装。

yum -y install php-xml
sudo service php-fpm restart

然而并没有用。。。然后查了查是机器的php配置有问题。。。然后想了想那只能用Excel2003,有行的限制,那么我能不能把行列倒过来呢?标题不放名字,改成日期,然后每一行是一个员工。这是一个能解决问题的办法。

然后第二天准备这么弄的时候,又有其他的需求花了一点时间。在解决新的需求的时候看到了别人导出数据用的cvs的代码。然后试了试,这个东西没有限制啊,按照,和\n进行分割就好了啊!于是改成csv格式,导出的数据没有问题~

博主

Just do it. Now or never.

相关推荐

嗨、骚年、快来消灭0回复。