修复ThinkPHP导出excel数字过大时显示为科学记数法,这种显示对于查看的用户来说是及其不友好的。所以,我们要使其转化为正常的数字串!
我在google 的过程中,查了一些资料。其中
1)、//可以设置excel的某行或某列的样式style
//比如设置:E 列为文本
$this->_excelObj->getActiveSheet()->getStyle('C')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
//或设置第3行为文本
$this->_excelObj->getActiveSheet()->getStyle('3')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
这是设置excel表格的单元格样式,我用了这个方法,但是没有效果。也许我使用哪里出错了,但是我不推荐使用这个方法!
2)、之所以会显示为科学记数法,是因为是数字表达。但是我们把数字转化为字符串,显示就会不会数字以科学记数法的显示方式了。
//在给需要显示为正常数字的单元格赋值的时候,在值的前面或后面加一个空字符串,这样数值型就自动转换为字符型了。具体实例:
$this->_excelObj->getActiveSheet()->setCellValue($v.$i, ' '.$data[$colName[$k]]);
3)、更简单明了的方式,直接强制把值的类型做转换,设置值为字符串类型:
// $this->_excelObj->getActiveSheet()->setCellValueExplicit($v.$i,$data[$colName[$k]],PHPExcel_Cell_DataType::TYPE_STRING);
// $this->_excelObj->getActiveSheet()->getStyle('C'.$i)->getNumberFormat()->setFormatCode("@");
然后再正常赋值
$this->_excelObj->getActiveSheet()->setCellValue($v.$i, $data[$colName[$k]]);
>我比较喜欢第二种方式,简单不粗暴