修复ThinkPHP导出excel数字过大时显示为科学记数法

修复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]]);

   >我比较喜欢第二种方式,简单不粗暴
posted @ 2017-10-11 09:41  米饭!大米饭  阅读(1170)  评论(0编辑  收藏  举报