使用场景:项目中需要提供导出到Excel1表格中的功能,因此我们需要使用PHPExcel来进行导出数据,但是我们经常会遇到这样的问题,导出身份证或者是其他类型的数据时,出现了科学计数法,从而导致数据失真,如下图:
失真的数据样式而实际上我们需要的数据,如下图:
正常的数据样式有下面的2中方式可以解决:
1. 在输出的时候给对应的字段前面加上空格,如下图:
不过我个人不推荐使用这种方式,因为在导出之后,你需要先将导出数据中的空格全部去掉,这样还是有些麻烦,于是就有了下面的第二种解决方法。
2. 使用setCellValueExplicit()方法给单元格赋值
我更推荐使用这样方式,因为这种方式在赋值前已经确定这个单元格的格式为文本格式,因此不会出现数据失真和以科学计数法来导出数据的问题。
最后,我们更应该看一下这个方法底层是怎么封装的。如下图:
代码如下:
/**
* 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中方式,肯定还有其他更好的方式,欢迎大家指正。
网友评论