thinkphp6导入excle表格,带图片

excle导入导出写了不少,但是一直没导入过图片,正好要用到,所以研究并记录一下

安装phpoffice

composer仓库直接搜索phpoffice,下载次数最多的,第一个就是

版本根据自己PHP版本而定,我用的thinkphp6,php7.3,就用最新版本了

项目根目录输入以下命令

composer require phpoffice/phpspreadsheet

出现下图所示,表示安装成功

安装不成功,可能是权限问题,检查composer.json和vendor,如果用centos的话不能用root用户,需新建用户执行composer命令

PHP代码

大概实现思路,先将excle上传保存到服务器,在读取excle处理数据和图片

if($this->app->request->isPost()){
   try {
        		$file = $this->app->request->file('inputFile');
	        	validate([
			        		 'file' => [
				                // 限制文件大小(单位b),这里限制为4M
				                //fileSize' => 4 * 1024 * 1024,
				                'fileExt'  => 'xlsx,xls'
				            ]
					        ],
					        [
					            //'file.fileSize' => '文件太大',
					            'file.fileExt' => '不支持的文件',
					        ]
						)->check(['file'=>$file]);
	        	$savename = \think\facade\Filesystem::putFile( 'import', $file);
	        	$import_path = root_path() . 'runtime/storage/' . $savename;
	        	$spreadsheet = IOFactory::load($import_path);
                $sheet = $spreadsheet->getActiveSheet();
				$sheetData = $sheet->toArray();
				if(empty($sheetData) || !is_array($sheetData)){
					$this->error('上传失败');
				}
                /*************图片单独处理开始*****************/
         $imageFilePath=root_path().'/public/uploads/images/' ;//图片保存目录
         if (!file_exists ( $imageFilePath )) {
             mkdir("$imageFilePath", 0777, true);
         }
         //处理图片
         foreach($sheet->getDrawingCollection() as $img) {
             list($startColumn,$startRow)= Coordinate::coordinateFromString($img->getCoordinates());//获取图片所在行和列
             $imageFileName = date('YmdHis').mt_rand(1000,9999);//图片名字随机生成
             switch($img->getMimeType()) {
                 case 'image/jpg':
                 case 'image/jpeg':
                     $imageFileName.='.jpg';
                     imagejpeg($img->getImageResource(),$imageFilePath.$imageFileName);
                     break;
                 case 'image/gif':
                     $imageFileName.='.gif';
                     imagegif($img->getImageResource(),$imageFilePath.$imageFileName);
                     break;
                 case 'image/png':
                     $imageFileName.='.png';
                     imagepng($img->getImageResource(),$imageFilePath.$imageFileName);
                     break;
             }
             $startColumn = $this->ABC2decimal($startColumn);//由于图片所在位置的列号为字母,转化为数字
             $sheetData[$startRow-1][$startColumn]='/uploads/images/'.$imageFileName;//把图片插入到数组中
         } 
         /*************图片单独处理结束*****************/
                $res = $this->upload_excle($sheetData);//自定义入库方法
				if($res > 0)$this->success('成功导入'.$res.'条数据');
				$this->error('导入失败!!!');
        	} catch (\think\exception\ValidateException $e) {
        			$this->error($e->getMessage());
        	}
        	
        }

来一张成功的图片

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值