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

使用场景:项目中需要提供导出到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中方式,肯定还有其他更好的方式,欢迎大家指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,313评论 25 709
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,864评论 6 13
  • 转自链接 目录 1.认识NPOI 2.使用NPOI生成xls文件 2.1创建基本内容 2.1.1创建Workboo...
    腿毛裤阅读 13,686评论 1 3
  • 一、误删资料恢复 一不小心删错了,还把回收站清空了,咋办啊?只要三步,你就能找回你删掉并清空回收站的东西。 步骤:...
    八爷君阅读 5,415评论 2 7
  • 自从定了锻炼目标后,我就开始早起,闹钟6点准时响,我一般在6:10左右起床。总会有几分钟拖延症,而不是听到闹钟立马...
    我若盛开清风自来阅读 1,020评论 2 3