PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
今天接到了一个从Excel内读取图片的需求,在网上查找了一些资料,基本实现了自己的需求,不过由于查到的一些代码比较久远,不能直接移植到自己的项目里,需要稍加改动一下。
这里介绍一下分别使用phpspreadsheet和PHPExcel扩展库来实现读取Excel内图片的功能:
PHPSpreadsheet
首先安装phpspreadsheet,由于线上服务器PHP版本是PHP5.6,所以需要安装兼容PHP5.6的版本,这里安装1.8.2版本
composerrequirephpoffice/phpspreadsheet=1.8.2
然后就可以在项目里使用了
usePhpOffice\PhpSpreadsheet\Cell\Coordinate;
usePhpOffice\PhpSpreadsheet\IOFactory;
$imageFilePath='./uploads/imgs/';//图片本地存储的路径
if(!file_exists($imageFilePath)){//如果目录不存在则递归创建
mkdir($imageFilePath,0777,true);
}
try{
$inputFileName='./files/1.xlsx';//包含图片的Excel文件
$objRead=IOFactory::createReader('Xlsx');
$objSpreadsheet=$objRead->load($inputFileName);
$objWorksheet=$objSpreadsheet->getSheet(0);
$data=$objWorksheet->toArray();
foreach($objWorksheet->getDrawingCollection()as$drawing){
list($startColumn,$startRow)=Coordinate::coordinateFromString($drawing->getCoordinates());
$imageFileName=$drawing->getCoordinates().mt_rand(1000,9999);
switch($drawing->getExtension()){
case'jpg':
case'jpeg':
$imageFileName.='.jpg';
$source=imagecreatefromjpeg($drawing->getPath());
imagejpeg($source,$imageFilePath.$imageFileName);
break;
case'gif':
$imageFileName.='.gif';
$source=imagecreatefromgif($drawing->getPath());
imagegif($source,$imageFilePath.$imageFileName);
break;
case'png':
$imageFileName.='.png';
$source=imagecreatefrompng($drawing->getPath());
imagepng($source,$imageFilePath,$imageFileName);
break;
}
$startColumn=ABC2decimal($startColumn);
$data[$startRow-1][$startColumn]=$imageFilePath.$imageFileName;
}
dump($data);die();
}catch(\Exception$e){
throw$e;
}
publicfunctionABC2decimal($abc)
{
$ten=0;
$len=strlen($abc);
for($i=1;$i<=$len;$i++){
$char=substr($abc,0-$i,1);//反向获取单个字符
$int=ord($char);
$ten+=($int-65)*pow(26,$i-1);
}
return$ten;
}
可以看到,图片被读取并存到了本地服务器中
PHPExcel
PHPExcel实现从Excel文件里读取内容的方法和phpspreadsheet几乎一样,毕竟phpspreadsheet就是在PHPExcel基础上写的,不过PHPExcel由于已经被废弃了,所以建议优先使用phpspreadsheet,如果原来项目里一直使用了PHPExcel也可以继续使用PHPExcel的方法
usePHPExcel_IOFactory;
usePHPExcel_Cell;
try{
$inputFileName='./files/1.xlsx';
$inputFileType=PHPExcel_IOFactory::identify($inputFileName);
$objReader=PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel=$objReader->load($inputFileName);
}catch(\Exception$e){
die('加载文件发生错误:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'":'.$e->getMessage());
}
$sheet=$objPHPExcel->getSheet(0);
$data=$sheet->toArray();//该方法读取不到图片,图片需单独处理
$imageFilePath='./uploads/imgs/';//图片本地存储的路径
if(!file_exists($imageFilePath)){
mkdir($imageFilePath,0777,true);
}
//处理图片
foreach($sheet->getDrawingCollection()as$img){
list($startColumn,$startRow)=PHPExcel_Cell::coordinateFromString($img->getCoordinates());//获取图片所在行和列
$imageFileName=$img->getCoordinates().mt_rand(1000,9999);
switch($img->getExtension()){
case'jpg':
case'jpeg':
$imageFileName.='.jpeg';
$source=imagecreatefromjpeg($img->getPath());
imagejpeg($source,$imageFilePath.$imageFileName);
break;
case'gif':
$imageFileName.='.gif';
$source=imagecreatefromgif($img->getPath());
imagejpeg($source,$imageFilePath.$imageFileName);
break;
case'png':
$imageFileName.='.png';
$source=imagecreatefrompng($img->getPath());
imagejpeg($source,$imageFilePath.$imageFileName);
break;
}
$startColumn=ABC2decimal($startColumn);
$data[$startRow-1][$startColumn]=$imageFilePath.$imageFileName;
}
var_dump($data);
publicfunctionABC2decimal($abc)
{
$ten=0;
$len=strlen($abc);
for($i=1;$i<=$len;$i++){
$char=substr($abc,0-$i,1);//反向获取单个字符
$int=ord($char);
$ten+=($int-65)*pow(26,$i-1);
}
return$ten;
}
总结
以上所述是小编给大家介绍的PHP读取Excel内的图片,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。