记使用laravel-excel问题及文件转码

25. July 2019 Laravel 0
laravel 5.5
laravel-excel 3.1
php 7.2
导入Excel格式文件的数据没问题,but,遇到计算列后就有问题了。
抛出异常,PhpOffice \ PhpSpreadsheet \ Calculation \ Exception  array_keys() expects parameter 1 to be array, float given,
controller:
$data = Excel::toCollection(new UsersImport(), public_path("test1.xls"));
import:
class UsersImport implements ToCollection,WithCalculatedFormulas
搜索了一些资料尚未解决,目前还未研究PhpSpreadsheet源码,项目时间不允许。那么,换个思路,使用csv格式文件,word和wps都支持。
然后,我又遇到编码问题了,laravel-excel默认编码为UTF-8,Office Excel另存为CSV文件的编码也是UTF-8,这没问题。然而WPS的存储CSV默认的编码为GB2312,laravel-excel目前没发现可以设置编码自动选择或指定多个编码,情况就有点尴尬了,只能在控制器中修改文件编码了,如下:
private function getFile($request)
{
         $file = $request->file("file_name");
         $content = file_get_contents($file);
         $content = $this->str_to_utf8($content);
         file_put_contents($file, $content);
         return $file;
}
private function str_to_utf8($str = '')
{
         $current_encode = mb_detect_encoding($str, array("ASCII", "GB2312", "GBK", 'BIG5', 'UTF-8'));
         $encoded_str = mb_convert_encoding($str, 'UTF-8', $current_encode);
         return $encoded_str;
}
然后就没有然后了,正常运行了。

Leave a Reply

Your email address will not be published. Required fields are marked *