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

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

使用PHPExcel导出数据时出现科学计数法问题_第1张图片
失真的数据样式

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

使用PHPExcel导出数据时出现科学计数法问题_第2张图片
正常的数据样式

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

使用PHPExcel导出数据时出现科学计数法问题_第3张图片
第一种解决方式

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

使用PHPExcel导出数据时出现科学计数法问题_第4张图片
第二种解决方式

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

使用PHPExcel导出数据时出现科学计数法问题_第5张图片
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’,(如下图)即文本类型。

使用PHPExcel导出数据时出现科学计数法问题_第6张图片
类常量

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

你可能感兴趣的:(使用PHPExcel导出数据时出现科学计数法问题)