Demo:
<?php
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$spreadsheet->getActiveSheet()->setCellValue('A1', '900473179110024');
$xlsx = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$xlsx->save('test.xlsx');
执行后打开生成的Excel如下图,在A1格子里本该出现的值是900473179110024
,但是实际上输出的excel却变成了科学计数法,将它变成字符后也是900473179110020
,与期待值并不相同
解决方案:
在经过一步步追踪后发现,phpspreadsheet在记录这个值之前做了类型判断,以下截取部分源码做分析:
<?php
namespace PhpOffice\PhpSpreadsheet\Cell;
use DateTimeInterface;
use PhpOffice\PhpSpreadsheet\RichText\RichText;
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
class DefaultValueBinder implements IValueBinder
{
public function bindValue(Cell $cell, $value)
{
...
// Set value explicit
$cell->setValueExplicit($value, static::dataTypeForValue($value))