PHPExcel信息导入带图片

首先要有PHPExcel包。这个网上很好找到。

进入正题。
我写了一个单独的方法来供每个控制器试用。

上传后读取excel文件。

		$info = $excels->move(ROOT_PATH . 'your path');						//上传
		$filename = 'your path';  //上传后的路径
 		$ext = $info->getExtension();
        $excels = $this->importGet($filename,$ext,'path');

ImportGet函数

//$filename 文件路径
//$exts 文件后缀
//$party 要保存的路径(可自定义)
public function importGet($filename,$exts = 'xls',$party = null){
        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
        vendor("PHPExcel.PHPExcel");
        //创建PHPExcel对象,注意,不能少了\
        $PHPExcel = new \PHPExcel();
        //如果excel文件后缀名为.xls,导入这个类
        if($exts == 'xls'){
            vendor("PHPExcel.PHPExcel.Reader.Excel5");
            $PHPReader = new \PHPExcel_Reader_Excel5();
        }elseif($exts == 'xlsx'){
            vendor("PHPExcel.PHPExcel.Reader.Excel2007");
            $PHPReader = new \PHPExcel_Reader_Excel2007();
        }

        //载入文件
        $PHPExcel = $PHPReader->load($filename);
        //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
        $currentSheet = $PHPExcel->getSheet(0);
        //获取总列数
        $allColumn = $currentSheet->getHighestColumn();
        //获取总行数
        $allRow = $currentSheet->getHighestRow();

		//该变量可判断excel中是否有图片
        $allImage = $currentSheet->getDrawingCollection();

        $data = array();
        
		//图片在本地存储的路径
        $imageFilePath = 'your path';
        if (! file_exists ( $imageFilePath )) {
            mkdir("$imageFilePath", 0777, true);
        }
       //如果有图片则进入循环
        if($allImage){
            foreach($allImage as $drawing){
            	//string 为有图片的表格坐标 如 A2 B3等
                $string = $drawing->getCoordinates();
                //获取excel中的图片
                $filename = $drawing->getPath();
                $img = ‘your path’;
                //这一句比较重要,将图片放在路径中
                copy($filename, $img);
                $cell = $currentSheet->getCell($string);
                $path = 'http://quote.daowepark.com/' . $img;
                //把图片保存的路径 丢回单元格,方便下面的保存。
                $cell->setValue($path);
            }
        }




        // 循环获取表中的数据,
        // $currentRow表示当前行,从哪行开始读取数据,索引值从0开始
        for($currentRow = 1;$currentRow <= $allRow;$currentRow++){
            //从哪列开始,A表示第一列
            for($currentColumn = 'A';$currentColumn <= $allColumn;$currentColumn++){
                //数据坐标
                $address = $currentColumn . $currentRow;

                //读取到的数据,保存到数组$arr中
                if($currentColumn === 'A'){
                    $data[$currentRow][$currentColumn] = (string)$currentSheet->getCell($address)->getValue();
                }else{
                    $data[$currentRow][$currentColumn] =(string) $currentSheet->getCell($address)->getValue();
                }
            }
        }

        return $data;
    }

题外话:
网上有很多调用了getMimeType()和getImageResource()等,但是我发现这两个方法PHPExcel_Worksheet_Drawing类中是没有的,是PHPExcel_Worksheet_MemoryDrawing类中的。在改写了Drawing.php后不报错了,读取出来的对象中 imageResource依旧是空的,无奈只好尝试copy这个方法。虽然成功了。但依旧不解。希望有朋友能够解答。

共勉。

你可能感兴趣的:(个人开发记录,PHP,菜鸟记录)