PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)


Posted in PHP onNovember 19, 2019

今天接到了一个从Excel内读取图片的需求,在网上查找了一些资料,基本实现了自己的需求,不过由于查到的一些代码比较久远,不能直接移植到自己的项目里,需要稍加改动一下。

这里介绍一下分别使用phpspreadsheet和PHPExcel扩展库来实现读取Excel内图片的功能:

PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库) 

PHPSpreadsheet

首先安装phpspreadsheet,由于线上服务器PHP版本是PHP5.6,所以需要安装兼容PHP5.6的版本,这里安装1.8.2版本

composer require phpoffice/phpspreadsheet=1.8.2

然后就可以在项目里使用了

use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\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;
}
public function ABC2decimal($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内的图片(phpspreadsheet和PHPExcel扩展库) 

PHPExcel

PHPExcel实现从Excel文件里读取内容的方法和phpspreadsheet几乎一样,毕竟phpspreadsheet就是在PHPExcel基础上写的,不过PHPExcel由于已经被废弃了,所以建议优先使用phpspreadsheet,如果原来项目里一直使用了PHPExcel也可以继续使用PHPExcel的方法

use PHPExcel_IOFactory;
use PHPExcel_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);
public function ABC2decimal($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内的图片,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
非常好的php目录导航文件代码
Oct 09 PHP
PHP语法速查表
Dec 06 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 PHP
使用PHP开发留言板功能
Nov 19 #PHP
关于Laravel参数验证的一些疑与惑
Nov 19 #PHP
php传值和传引用的区别点总结
Nov 19 #PHP
php 使用 __call实现重载功能示例
Nov 18 #PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 #PHP
php 多继承的几种常见实现方法示例
Nov 18 #PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 #PHP
You might like
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
室内设计实习自我鉴定
2013/09/25 职场文书
工程部经理岗位职责
2013/12/08 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
创新比赛获奖感言
2014/02/13 职场文书
校庆活动方案
2014/03/31 职场文书
新法人代表任命书
2014/06/06 职场文书
计算机实训报告范文
2014/11/05 职场文书
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS