文章目录
读取Excel中小数时位数异常
读取前,为避免excel数据格式不统一,把单元格格式全部改为文本,文件中的数字全部是文本格式
但是读取的结果,php还是自动把数字自动转换成了float格式。但是,蛋疼的是,同样的数据格式,有个别数字被转换成了一长串!
那没办法了,那就四舍五入保留一位小数吧,只能麻烦点了。
round()根本不管用,还是一长串子。
百度了下,有说是php精度问题,设置ini_set(‘precision’,-1),这个有待测试
我使用的是第二种方式:
原理应该是底层运算二进制的问题
可以利用这个方式解决:sprintf(“%.2f”,83.59999999999999); 这样是保留2位小数。想保留一位就%.1f
读取数据是对象,导致报错的
解决办法
$val= $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
if (is_object($val)) {
$val = $val->__toString();
}
数字字符串被默认按科学计数法显示
当我们使用php程序生成一些纯数字字符串,并生成excel文件后,发现当字符串过长时,首位不为0的值会被自动转为科学计数,不方便我们复制使用,如下
可以使用excel插件设置该列的单元格格式,来避免这种情况,或者在纯数字字符串前加上非数字字符(空格或空字符串无效)
当时对于已经生成的excel文件,或者不想加非数字字符的情况,则需要直接调整excel文件了
修改单元格格式为文本,没有效果
修改单元格格式为自定义,然后选0。科学计数的值正常了,但是以0开头的字符中,头部的0消失了。还不是不符合我们的需求
转换思路,我们可以在把该列值前统一加一个空字符串,那么值就不是数字了,科学计数也就失效了,具体如下
选中E列的第1行,在代码框中输入代码,回车
发现选中的行的值已经变为字符串了,然后鼠标移动到该选中行右下角,变成一个加号时,点左键往下拉,F列中对应行的值就复制到E列,并且都变成正常字符串显示了
phpexcel导出报:Provisional headers are shown
出现这个问题之前,其他的项目都是使用相同的方法生成下载excel文件,没有异常。这次出现这个问题,先排除了网站路径配置问题,因为打断点后,是可以正常输出内容的。
catch捕获异常后显示 “continue" targeting switch is equivalent to “break”. Did you mean to use "continue 2”
百度后说是PHP版本的bug
查看了自己的php版本果然是7.3的,切换到了7.1,正常执行
读取文件提示内存超出
读取上传的excel文件时,文件明明很小,只有几十行数据,但会提示内存超出。
这是因为excel文件的数据格式有问题,虽然文件只有几kb,几十行数据,但在数据下面有大量的无效空行。
php读取时,把这些无效的空行当做有效数循环读取,导致内存超出,我们只要删除这些空白行就行了。
1、选中第一行空白行
2、然后快捷键 ctrl+shift+↓ 会选中下方所有行
3、右键,删除
4、ctrl+s 保存
保存后,会看到exvel右侧之前很短的滚动条变长了。说明excel行数变少了,问题解决