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

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

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

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;
}

可以看到,图片被读取并存到了本地服务器中

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

(0)

相关推荐

  • php判断上传的Excel文件中是否有图片及PHPExcel库认识

    需要借助PHPExcel这个库 复制代码 代码如下: $excelPath = 'Test.xls'; $objReader = PHPExcel_IOFactory::createReader('Excel5'); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load($excelPath); $currentSheet = $objPHPExcel->getActiveSheet(); $AllImage

  • PHPExcel读取Excel文件的实现代码

    涉及知识点: php对excel文件进行循环读取 php对字符进行ascii编码转化,将字符转为十进制数 php对excel日期格式读取,并进行显示转化 php对汉字乱码进行编码转化 复制代码 代码如下: <?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianToJD(1, 1, 1970); $gregorian = JDToGregorian($jd+in

  • PHPExcel简单读取excel文件示例

    本文实例讲述了PHPExcel简单读取excel文件的方法.分享给大家供大家参考,具体如下: PHP Excel 2007 classes Project providing a set of classes for the PHP programming language, which allow you to write to and read from different file formats, like Excel 2007, PDF, HTML, ... This project

  • php读取EXCEL文件 php excelreader读取excel文件

    php开发中肯定会遇到将excel文件内容导入到数据库的需要,php-excel-reader是一个读取excel的类,可以很轻松的使用它读取excel文件非常方便. php-excel-reader下载地址: http://www.jb51.net/codes/67223.html 我下载的是php-excel-reader-2.21版本,使用的时候还遇到几个小问题,后面再细说,先奉上php实例: 我使用的excel如下图: php代码如下: 复制代码 代码如下: <?php /*by www

  • 利用PHPExcel实现Excel文件的写入和读取

    作为一个原本的Java党,用过PHP才知道,原来对于Excel文件的写入和读取原来可以这么简单! 利用PHP实现对于Excel的读取,主要借助于PHPExcel插件来完成. PHPExcel下载地址:PHPExcel下载 一.PHPExcel实现写入excel操作步骤 首先需要引入类文件,引入PHPExcel.php文件. 1.新建一个Excel表格(实例化PHPExcel类) 2.创建sheet(内置表) (createSheet()方法.setActiveSheet()方法.getActiv

  • PHPExcel读取EXCEL中的图片并保存到本地的方法

    HPExcel是相当强大的 MS Office Excel 文档生成类库,当需要输出比较复杂格式数据的时候,PHPExcel 是个不错的选择. 经过认真研究API文档和查看官方文档,终于找到读取EXCEL中的图片,目前我只能读取excel 2003格式的.excel2007貌似还不支持. 其中主要使用的API为PHPExcel_Worksheet,PHPExcel_Worksheet_BaseDrawing,PHPExcel_Worksheet_MemoryDrawing. 废话少说,直接上代码

  • php excel reader读取excel内容存入数据库实现代码

    上一篇文章介绍了php-excel-reader读取excel文件的方法,因为需要,将excel这样的数据: 新建数据库表如下: -- 数据库: `alumni` -- 表的结构 `alumni` CREATE TABLE IF NOT EXISTS `alumni` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `gid` varchar(20) DEFAULT NULL COMMENT '档案编号', `student_no` varchar(20)

  • thinkphp3.2中实现phpexcel导出带生成图片示例

    首先下载PHPEXCEL  下载地址:http://phpexcel.codeplex.com/        https://github.com/PHPOffice/PHPExcel 把Classes目录下的文件(PHPExcel.php和PHPExcel文件夹),放到ThinkPHP\Library\Org\Util目录下 PHPExcel.php  改名为 :PHPExcel.class.php // 导出exl public function look_down(){ $id = I(

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

    今天接到了一个从Excel内读取图片的需求,在网上查找了一些资料,基本实现了自己的需求,不过由于查到的一些代码比较久远,不能直接移植到自己的项目里,需要稍加改动一下. 这里介绍一下分别使用phpspreadsheet和PHPExcel扩展库来实现读取Excel内图片的功能: PHPSpreadsheet 首先安装phpspreadsheet,由于线上服务器PHP版本是PHP5.6,所以需要安装兼容PHP5.6的版本,这里安装1.8.2版本 composer require phpoffice/p

  • Python读取excel中的图片完美解决方法

    excel中有图片是很常见的,但是通过python读取excel中的图片没有很好的解决办法. 网上找了一种很聪明的方法,原理是这样的: 1.将待读取的excel文件后缀名改成zip,变成压缩文件. 2.再解压这个文件. 3.在解压后的文件夹中,就有excel中的图片. 4.这样读excel中的图片,就变成了读文件夹中的图片了,和普通文件一样,可以做各种处理. 解压后的压缩包如下: python脚本如下: ''' File Name: readexcelimg Author: tim Date:

  • Python实现读取excel中的图片功能

    目录 一.读取excel文件 二.读取excel中的图片 (1)使用zipfile模块 (2)使用openpyxl读取 三.对读取的图片进行处理 补充 一.读取excel文件 我们先来看看如何读取excel文件,读取excel文件的方式很多.这里选择openpyxl模块,安装语句如下: pip install openpyxl 我们还需要用到一些其它模块,具体如下: pip install pyzbar pip install pillow pip install numpy 下面我们就可以开始

  • c# 应用NPOI获取Excel中的图片,保存至本地的算法

    要求:读取excel中的图片,保存到指定路径 思路:  利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴入两张图片 如下图: 3.在Form中拖入一个button 4.点击button,在点击事件方法中写入,要读取图片的方法:ExcelToImage 点击事件方法如下: private string exclePath = @"C:\users\lenovo\Desktop\testPic.xls&q

  • python在CMD界面读取excel所有数据的示例

    代码 import xlrd import os from prettytable import PrettyTable import pandas #创建一个Excel表类 class Excel(object): def __init__(self, path): self.path = path //路径要加上文件名 #读取Excel内全部数据 参数sname是sheet页名字 def read_all_data(self, sname): workbook = xlrd.open_wor

  • PHP读取Excel类文件

    想要使用PHP读取Excel文件必然要用到PHPExcel开源类库,网上资源应该挺多的.但是每一种的操作必然都是不同的,可原理应该都是大同小异. 这个文件夹里包含的就是PHPExcel类文件 ,在外面还有一个入口PHP文件 处理机制: 1.读取Excel文件         2.获取最大行号和最大列号             3.通过行数循环里面嵌套列数循环来用特殊符号拼接每个小表格里面的数据得到一个字符串         4.然后使用explode拆分函数将字符串拆分后就得到了一个二维数组(即

  • python读取文件夹中图片的图片名并写入excel表格

    有的时候,我们需要读取图片名,写入表格中,以便结合图片的其他信息,做进一步的分析. 假如,现在要读取存放在E盘的origin_file文件夹,读取里面的图片名将其写入到excel文件img.xlsx中. 首先,需要读取图片文件夹路径 import pandas as pd import os os.chdir('E:\\') #1.读取图片文件夹路径 path='origin_file' 然后,pandas建立空白excel文件"img.xlsx" #2.建立空白excel文件&quo

  • 利用Python第三方库xlrd读取Excel中数据实例代码

    目录 1. 安装 xlrd 库 2. 使用 xlrd 库 2.1 打开 Excel 工作表对象 2.2 读取单个单元格数据 2.3 读取多个单元格数据 2.3 读取所有单元格数据 附:行.列操作 3. 总结 1. 安装 xlrd 库 Python 读取 Excel 中的数据主要用到 xlrd 第三方库.xlrd 其实就是两个单词的简化拼接,我们可以把它拆开来看,xl 代表 excel, rd 代表 read, 合并起来就是 xlrd, 意思就是读 excel 的第三方库. 这种命名风格也正是我们

  • Android开发实现读取excel数据并保存为xml的方法

    本文实例讲述了Android开发实现读取excel数据并保存为xml的方法.分享给大家供大家参考,具体如下: 前阵子,公司请外面人翻译了一些android中values中的一些strings,然而保存的都是excel格式,如果单纯的将excel中的数据粘贴到指定的xml中的话,工作量非常的大,于是,自己写了个简单的demo,将excel中的数据读取并保存为xml对应的数据,下面的demo和图片展示: 1.数据保存在BeanValue中,包括key和value,方便后续数据读取 package c

随机推荐