美文网首页
使用PHPExcel导出数据时出现科学计数法问题

使用PHPExcel导出数据时出现科学计数法问题

作者: 彩虹的夜晚 | 来源:发表于2017-09-08 20:08 被阅读39次

    使用场景:项目中需要提供导出到Excel1表格中的功能,因此我们需要使用PHPExcel来进行导出数据,但是我们经常会遇到这样的问题,导出身份证或者是其他类型的数据时,出现了科学计数法,从而导致数据失真,如下图:

    失真的数据样式

    而实际上我们需要的数据,如下图:

    正常的数据样式

    有下面的2中方式可以解决:
    1. 在输出的时候给对应的字段前面加上空格,如下图:

    第一种解决方式

    不过我个人不推荐使用这种方式,因为在导出之后,你需要先将导出数据中的空格全部去掉,这样还是有些麻烦,于是就有了下面的第二种解决方法。
    2. 使用setCellValueExplicit()方法给单元格赋值

    第二种解决方式

    我更推荐使用这样方式,因为这种方式在赋值前已经确定这个单元格的格式为文本格式,因此不会出现数据失真和以科学计数法来导出数据的问题。
    最后,我们更应该看一下这个方法底层是怎么封装的。如下图:

    PHPExcel底层的代码

    代码如下:

    /**
         * Set a cell value
         *
         * @param string $pCoordinate Coordinate of the cell
         * @param mixed  $pValue Value of the cell
         * @param string $pDataType Explicit data type
         * @param bool $returnCell Return the worksheet (false, default) or the cell (true)
         * @return PHPExcel_Worksheet|PHPExcel_Cell    Depending on the last parameter being specified
         */
        public function setCellValueExplicit($pCoordinate = 'A1', $pValue = null, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING, $returnCell = false)
        {
            // Set value
            $cell = $this->getCell($pCoordinate)->setValueExplicit($pValue, $pDataType);
            return ($returnCell) ? $cell : $this;
        }
    

    从上面的图片中就可以看到在setCellValueExplicit()方法中就默认设置了单元格的格式,而它的默认值是‘s’,(如下图)即文本类型。

    类常量

    当然了,说起来应该不止上面提到的这2中方式,肯定还有其他更好的方式,欢迎大家指正。

    相关文章

      网友评论

          本文标题:使用PHPExcel导出数据时出现科学计数法问题

          本文链接:https://www.haomeiwen.com/subject/kyqnjxtx.html