首先我接收到领导给我的xlsx文件(2007以后版本的excel)
导入并读取里面的内容使用phpexcel的toarray方法将对象转换为数组 但是提示下标不能为0报错
我一开始以为是编码问题,后来一次偶然发现打开文件什么都不改直接ctrl+c然后拿去就可以导入并读取了。
后来百度了解到其实xlsx(相当于一堆xml文件的压缩包,里面包含excel的文本内容格式字体等等xml文件)
由于xlsx文件在winods环境下改动或保存会增加很多xml文件(领导发我的文件我将后缀改为.rar打开发现里面只有9个xml文件,如果在windows下改动或者不改动直接保存打开会发现里面有17个文件)
导致phpexcel读取到的对象结构不一致 所以不能用自带的toarray函数转换 改成循环判断结构并用 __toString将对象转化字符串**
如果你发现领导的excel文件有缺失(xml文件数量不对)现象,就不能用toarray来获取数组了 只能自己循环获取并判断是否是字符串 不是字符串用__toString()来转化成字符串并拼接成数组
至于为什么同一个文件发来的时候和什么都不修改直接点击保存后里面的xml文件数量不一样这个我也不知道为啥 个人猜测可能可能是excel软件会对里面的xml文件进行补全
下面是代码
/获取表单上传文件
$file = request()->file('file');
$info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH