php批量导入带有图片的Excel表格

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <[email protected]>
// +----------------------------------------------------------------------

// 应用公共文件
define(‘EXCEL_EXTENSION_2003‘, "xls");
define(‘EXCEL_EXTENSION_2007‘, "xlsx");

/**
 * 处理Excel中图片
 *
 * @param string $file_name 文件名
 * @param string $full_path 文件完整路径
 */
function process_excel_image($file_name, $full_path)
{
    // 引入PHPEXCEL类
    import(‘PHPExcel_IOFactory‘, EXTEND_PATH . "PhpExcel/PHPExcel/");
    import(‘PHPExcel‘, EXTEND_PATH . "PhpExcel/");
    // 判断文件版本,选择对应的解析文件
    if(getExtendFileName($file_name) == EXCEL_EXTENSION_2003)
    {
        $reader = \PHPExcel_IOFactory::createReader(‘Excel5‘);
    }
    else if(getExtendFileName($file_name) == EXCEL_EXTENSION_2007)
    {
        $reader = new \PHPExcel_Reader_Excel2007();
    }

    // 解析Excel文件
    //                 $objPHPExcel = $objReader->load(ROOT_PATH . "public/uploads/" . $file_path);
    $PHPExcel = $reader->load($full_path);
    $worksheet = $PHPExcel->getActiveSheet();
    $imageInfo = extractImageFromWorksheet($worksheet, ROOT_PATH . "public/uploads/school/");

    return $imageInfo;
}

/**
 * 返回文件路径的信息
 *
 * @param string $file_name
 * @return string
 */
function getExtendFileName($file_name) {
     
    $extend = pathinfo($file_name);
    $extend = strtolower($extend["extension"]);
    return $extend;
}

/**
 * worksheet中提取image
 *
 * @param object $worksheet
 * @param string $basePath
 */
function extractImageFromWorksheet($worksheet,$basePath){
     
    $result = array();
     
    $imageFileName = "";
     
    foreach ($worksheet->getDrawingCollection() as $drawing) {
        $xy=$drawing->getCoordinates();
        $path = $basePath;
        // for xlsx
        if ($drawing instanceof \PHPExcel_Worksheet_Drawing) {
             
            $filename = $drawing->getPath();
             
            $imageFileName = $drawing->getIndexedFilename();
             
            // process imageFileName
            $tmp = explode(".", $imageFileName);
            $tmp[0] = md5(microtime(true));
            $tmp_fileName = implode(".", $tmp);
            // process imageFileName
                
//                 $path = $path . $drawing->getIndexedFilename();
            $path = $path . $tmp_fileName;
             
            $boo = copy($filename, $path);
             
            $result[$xy] = $path;
             
            // for xls
        } else if ($drawing instanceof \PHPExcel_Worksheet_MemoryDrawing) {
             
            $image = $drawing->getImageResource();
             
            $renderingFunction = $drawing->getRenderingFunction();
             
            switch ($renderingFunction) {
                 
                case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
                     
                    $imageFileName = $drawing->getIndexedFilename();
                    $path = $path . $drawing->getIndexedFilename();
                    imagejpeg($image, $path);
                    break;
                     
                case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
                    $imageFileName = $drawing->getIndexedFilename();
                    $path = $path . $drawing->getIndexedFilename();
                    imagegif($image, $path);
                    break;
                     
                case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
                    $imageFileName = $drawing->getIndexedFilename();
                    $path = $path . $drawing->getIndexedFilename();
                    imagegif($image, $path);
                    break;
                     
                case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
                    $imageFileName = $drawing->getIndexedFilename();
                    $path = $path . $drawing->getIndexedFilename();
                    imagegif($image, $path);
                    break;
            }
            $result[$xy] = $imageFileName;
        }
    }
    return $result;
}

控制器:

public function upload_image()
    {
        $params = input(‘param.‘);
        
        if ($this->request->method() == "POST") {
            // 获取表单上传文件 例如上传了001.jpg
            $file = request()->file(‘excel‘);
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->validate([
                ‘size‘=>5242880,
                ‘ext‘=>‘xls,xlsx,csv‘
            ])->move(ROOT_PATH . ‘public‘ . DS . ‘uploads‘);
            if ($info){
                // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
                // $saveName =  $info->getSaveName();
                $file_path = $info->getSaveName();
                $file_name = $info->getFileName();
    
                // 引入PHPEXCEL类
                import(‘PHPExcel_IOFactory‘, EXTEND_PATH . "PhpExcel/PHPExcel/");
                import(‘PHPExcel‘, EXTEND_PATH . "PhpExcel/");
                // 判断文件版本,选择对应的解析文件
                if(getExtendFileName($file_name) == EXCEL_EXTENSION_2003)
                {
                    $reader = \PHPExcel_IOFactory::createReader(‘Excel5‘);
                }
                else if(getExtendFileName($file_name) == EXCEL_EXTENSION_2007)
                {
                    $reader = new \PHPExcel_Reader_Excel2007();
                }
    
                // 解析Excel文件
                // $objPHPExcel = $objReader->load(ROOT_PATH . "public/uploads/" . $file_path);
                $PHPExcel = $reader->load(ROOT_PATH . "public/uploads/" . $file_path);
                $worksheet = $PHPExcel->getActiveSheet();
                $imageInfo = extractImageFromWorksheet($worksheet, ROOT_PATH . "public/uploads/20170902/");
    
                var_dump($imageInfo);
            }else{
                // 上传失败获取错误信息
                return $this->error($file->getError());
            }
        } else {
            return $this->fetch();
        }
    }

引入PHPEXCEL类库:

时间: 2024-08-26 14:54:38

php批量导入带有图片的Excel表格的相关文章

phpexcel导入excel表格

html代码 <form action="{:U('Mall/updExcel')}" method="POST" enctype="multipart/form-data"> //提交form表单到Mall控制器下的upExcel方法中 <div style="float:left;width:41%;"> <div style="float:left;"> <i

用java实现excel数据批量导入数据库

不管是做软件还是做网站,相信很多人在做的时候都要用到数据库,而数据库的数据从何而来呢,可以使手动添加的,但是大多数情况下我们使用的是已有的数据,我们想借助开发的工具管理目前已有的数据,如果是小量的数据,手动录入也无妨,但是对于大量数据呢,手动录入显然已经不显示,而且,更多的时候,我们呢想在软件上增加一个数据的批量导入,这样不管是谁在用这款软件,都可以方便的管理已有数据,那么我们最常用的数据管理器是什么呢,毫无疑问Excel,但是我们做软件是几乎没有人会使用Excel作为DB,所以我们遇到的问题就

报表开发之批量导入导出excel

在日常使用报表过程中,会有这样一种情况,你将Excel表分发给各个员工,员工填完后,统一整理成多个Excel,你需要将这些数据,用报表的填报功能,提交录入到数据库中,这样一来可避免到服务器机房录数据的繁琐步骤,但是无论是批量导入和还是导出Excel,这对诸多报表软件或称集成报表功能的系统来说都是不容易的. 解决Excel导入的性能问题,可以利用FineReport开发的op=excel_submit功能,来实现不预览报表即可对填报表导入Excel. 根据报表工程的使用方式不同,批量导入Excel

PHP导入导出excel表格图片(转)

写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章 )但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了.基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件.优

【游戏开发】Excel表格批量转换成lua的转表工具

一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游戏都是使用Lua语言进行开发的.如果要用Lua直接读取CSV文件的话,又要写个对应的CSV解析类,不方便的同时还会影响一些加载速度,牺牲游戏性能.因此我们可以直接将Excel表格转换为lua文件,这样就可以高效.方便地在Lua中使用策划配置的数据了.在本篇博客中,马三将会和大家一起,用C#语言实现一个Exce

点餐小程序,点餐系统,管理后台批量导入excel菜品数据

点餐系统上线这段时间,有好多同学反馈,是否可以添加一个菜品批量导入的功能.由于平时比较忙,一直没有时间把菜品批量导入的功能加进来.今天正好空出来时间了,就来教大家实现下菜品批量导入的功能. 后面会把这节功能录制成视频放到点餐系统的课程里. 传送门:" rel="nofollow">点餐系统,java后台+点餐小程序 老规矩,先看效果图 选择excel菜品导入数据成功 之前有看过我课程的同学肯定知道,我之前是没有批量导入的类目的,不错,这个类目就是我们今天新加的功能. 实

PHPExcel-1.8.1导入、导出Excel表格

仅留作记录使用: /**      * 读取文件方案一      */     public function readExcel()     {                  require_once VENDOR_PATH . 'PhpExcel/PHPExcel/IOFactory.php';                  // 循环遍历数据         $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); /

C#批量导入Excel或WPS实现方法

批量导入导出Excel,WPS,TXT,可按照系统是否安装OFFICE.WPS情况选择,导出是自动选择. 上效果图 1 /// <summary> 2 /// //获得当前你选择的Excel Sheet的所有名字 3 /// </summary> 4 /// <param name="filePath">文件路径</param> 5 /// <param name="ExcelType">1 Microso

使用PHPExcel实现数据批量导出为excel表格

首先需要下载PHPExecel类文件,帮助文档可以参考PHPExcel中文帮助手册|PHPExcel使用方法. 下面直接上例子,是我自己写的一个简单的批量导出数据为excel的例子 前台页面 比较简单,就是一个超链接,跳转到处理页面,超链接也可以跟一些参数(看需求)! <a href="./Process1.php">导出excel表格</a> 后台Process.php页面 /** * 批量导出数据 * @param $arr 从数据库查询出来,即要导出的数据