PhpSpreadsheet读取excel【包含图片】

composer require phpoffice/phpspreadsheet=1.8.2

安装 phpspreadsheet 

$reader           = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); //实例化阅读器对象。
$spreadsheet      = $reader->load($filename);  //将文件读取到到$spreadsheet对象中
$sheet            = $spreadsheet->getSheet(0);//sheet
$highestColumn    = $sheet->getHighestColumn(); // 取得总列数
$highestRow       = $sheet->getHighestRow(); // 取得总行数

 

      for ($col = 1; $col <= $highestColumnIndex; ++$col) //列数是以A列开始
        {
            $column_name = $sheet->getCellByColumnAndRow($col, 1)->getFormattedValue();
            if(in_array($column_name,array_keys($format_column)))$column[] = ['clo' => $col,'key' => $format_column[$column_name]];
        }
        // 2 根据以上确定的列直接循环取值
        for ($row = 2; $row <= $highestRow; ++$row) //行号从1开始
        {
            $row_data = [];
            foreach ($column as $item){
                switch ($item['key']) {
                    case "tax":
                        $value = $sheet->getCellByColumnAndRow($item['clo'], $row)->getFormattedValue();
                        if(strpos($value, "%") > 0) $value = (float)$value/100;
                        $row_data[$item['key']] = $value;
                        break;
                    case "num" :
                        $row_data[$item['key']] = (int)$sheet->getCellByColumnAndRow($item['clo'], $row)->getCalculatedValue(true);
                        break;
                    case "money":
                        $res  = $sheet->getCellByColumnAndRow($item['clo'], $row)->getFormattedValue();
                        $row_data[$item['key']] =  str_replace(['¥', ','], '', $res);//一般先取出结果,然后自己处理比较方便。
                        break;
                    case "time":
                        $date = $sheet->getCellByColumnAndRow($item['clo'], $row)->getValue();
                        if(!$date){
                            $row_data[$item['key']] = null;
                        }else{
                            $row_data[$item['key']] = gmdate('Y-m-d', ($date - 25569) * 24 * 3600); //gmdate返回UTC的时间
                        }
                        break;
                    default :
                        $row_data[$item['key']]= Common::trim($sheet->getCellByColumnAndRow($item['clo'], $row)->getFormattedValue());
                }
            }
            if(count($row_data) != count($format_column)) throw new ApiException(Code::EXCEL_FORMAT_ERROR);
            //空数据过滤
            $res_data[] = $row_data;
        }
        $this->filterData($res_data);
        return array_values($res_data);

//过滤空数据
    private function filterData(&$row_data)
    {
        foreach ($row_data as $key => $item){
            $is_null = false;
            foreach ($item as $iv) {
                if(!empty($iv)) {
                    $is_null = true;    break;
                }
            }
            if($is_null == false ) unset($row_data[$key]);
        }
    }

 这里导入的时候会报错:

simplexml_load_string(): Entity: line 2: parser error : Input is not proper UTF-8...

我看到里边报错的地方在Properties.php,当我输出$propertyData是乱码的,所以对其进行转码

 到了这里是没有任何问题的,但当我把写的转码删除居然又成功了,经过反复思考,我觉得是Properties.php这个文件的编码问题,当我用编辑器修改的时候,编码就变回正常的UTF-8了,个人想法是这样的,如果遇到不同看法的可以留言给我,谢谢!

创作不易,如果能够解决您的问题,请给我点个赞,谢谢,或者想给予我更多的鼓励,可微信扫码打赏

作者:Mark
出处:https://mp.csdn.net/console/editor/html/105730455
个性签名:没有,就占个坑蹲着而已
阿里云:领取海量云产品优惠,服务器五折起步:https://www.aliyun.com/minisite/goods?userCode=tjndc6hg
腾讯云618活动:【腾讯云】618云聚惠,百款云产品限量抢购,1核2G云服务器首年95元https://cloud.tencent.com/act/cps/redirect?redirect=1059&cps_key=67b003b15a96762f5df12787441e6583&from=console

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄啊码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值