使用 PHPExcel 导入 Excel 大数字会自动转为科学计数法

我在使用 phpoffice/phpexcel 这个包读取excel文件时,较大的数字会自动转为科学计数法

如 1633653816560660 会转化为 1.6336538165607E+15,本来我还可以再手动转回来,但是发现它在转的时候会四舍五入。

我这边的业务需要验证这个数字的准确性,导致我校验无法通过。

请问,我该如何做?

讨论数量: 5

导出到excel之前对该字段强制字符串化,比如前面拼接上一个简单字符串,' ' 或者 ',' , 或者 '`' 类似,官方貌似可以这样
$objActSheet->setCellValueExplicit('A1', '330602198804224688', PHPExcel_Cell_DataType::TYPE_STRING);
或者这样
$objActSheet->getStyle('A1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
自己实践下吧

4年前 评论

@kaidy 你这个是导出到 excel 吧,我这边的需求是把 execl 中的数据导入到数据库,但是我用 phpExcel 导入后得到的是科学计数法。并且还四舍五入了导致我没法转回来。

4年前 评论
yangweijie

这个问题 大家经常遇到

//判断单元格是否为数字类型
                    if($cell->getDataType() == \PHPExcel_Cell_DataType::TYPE_NUMERIC){
                        // $cell_style_format=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat();
                        $cell_style_format = $cell->getStyle($cell->getCoordinate())->getNumberFormat(); //不需要getParent
                        $format_code = $cell_style_format->getFormatCode();
                        if (preg_match('/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i', $format_code)) { //判断是否为日期类型
                            $value = gmdate("Y-m-d", \PHPExcel_Shared_Date::ExcelToPHP($value)); //格式化日期
                        }else{
                            $value = \PHPExcel_Style_NumberFormat::toFormattedString($value, $format_code); //格式化数字
                        }
                    }

贴一段海豚php excel 插件里的导入逻辑, 不光要处理大数字 还要处理日期

4年前 评论

我也遇到过这个问题
解决方案是 把这列数据的格式改为 《会计专用》 即可解决问题 你到时保存时 记得都拼接上双引号 这样 导出时 也就是ok的了

4年前 评论
卡尔西法

直接在值后面拼接一个制表符即可

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!