zoukankan      html  css  js  c++  java
  • PHP导出excel文件带文字图片

    首先需在框架安装phpExcel

    复制粘贴即可使用

    1.导出不带图片的Excel

    function exportText($param, $title, $putArr, $fieldArr)
    {
        $phpexcel = new PHPExcel();
        //获取当前工作表
        $phpexcel->setActiveSheetIndex(0);
        //设置工作表名称
        $phpexcel->getActiveSheet()->setTitle($title);
        //设置列宽
        $charactors = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
        //计算导出列数
        $count = count($putArr);
        $count != count($fieldArr) ? exit('导出字段有误') : '';
        $copy = [];
        for ($i = 0; $i < $count; $i++) {
            if (isset($charactors[$i])) {
                $l = $charactors[$i];
            } else {
                $k = intval($i / $count) - 1;
                $last = $i % $count;
                $l = $charactors[$k] . $charactors[$last];
            }
            $copy[] = $l;
            //设置列宽
            $phpexcel->getActiveSheet()->getColumnDimension($l)->setWidth(16);
            //设置表头
            $tl = $l . '1';
            $tltitle = $putArr[$i];
            $phpexcel->getActiveSheet()->setCellValue($tl, $tltitle);
        }
        //将需要导出的数组循环放入excel
        foreach ($param as $key => $value) {
            $key += 2;
            for ($i = 0; $i < $count; $i++) {
                $phpexcel->getActiveSheet()->setCellValue($copy[$i] . $key, $value[$fieldArr[$i]]);
            }
        }
        //下载到服务器
        $sheet = $title . '.xlsx';
        (new PHPExcel_Writer_Excel2007($phpexcel))->save(SAVE_PATH . $sheet);
        return '/upload/' . $sheet;
    
        //本地浏览器下载
        $write = new PHPExcel_Writer_Excel2007($phpexcel);
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");;
        header('Content-Disposition:attachment;filename='.$title.'.xls');
        header("Content-Transfer-Encoding:binary");
        $write->save('php://output');
    }

    2.调用此方法即可

        $array = [
            [
                'id' => 1,
                'name' => 'xxx',
                'cate' => '老人',
                'username' => '张三',
            ],
            [
                'id' => 2,
                'name' => 'xxxx',
                'cate' => '老年人',
                'username' => '李四',
            ]
        ];
        $putArr = ['字段1','字段2','字段3','字段4']; 
        $fieldArr = ['字段1--对应数组下标','字段2--对应数组下标','字段3--对应数组下标','字段4--对应数组下标'];
        run($array, '导出文件名称', $putArr, $fieldArr);

    3.导出带有图片的Excel

    function exportTextImg($param, $title, $putArr, $fieldArr)
        {
            $phpexcel = new PHPExcel();
            //获取当前工作表
            $phpexcel->setActiveSheetIndex(0);
    
            //设置工作表名称
            $phpexcel->getActiveSheet()->setTitle($title);
            //设置列宽
            $charactors = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
            $count = count($putArr);
            $count != count($fieldArr) ? die('数据对不上') : '';
            $copy = [];
            for ($i = 0; $i < $count; $i++) {
                if (isset($charactors[$i])) {
                    $l = $charactors[$i];
                } else {
                    $k = intval($i / $count) - 1;
                    $last = $i % $count;
                    $l = $charactors[$k] . $charactors[$last];
                }
                $copy[] = $l;
                //设置列宽
                $phpexcel->getActiveSheet()->getColumnDimension($l)->setWidth(16);
                //设置表头
                $tl = $l . '1';
                $tltitle = $putArr[$i];
                $phpexcel->getActiveSheet()->setCellValue($tl, $tltitle);
            }
            $copy_img = [];
            foreach ($param as $key => $value) {
                $key += 2;
                for ($i = 0; $i < $count; $i++) {
    
                    if (strpos($fieldArr[$i],'img') !== false)
                    {
                        $objDrawing = new PHPExcel_Worksheet_Drawing(); //实例化导出的图片类
                        if(!$value[$fieldArr[$i]]){
                            continue;
                        }
                        /** 导出的图片地址必须是本地,否则excel会报错。
                         *  因为我导出的文件是直接下载到本地了,但是图片地址是阿里云oss地址,这样导出Excel文件会报错。
                         *  所以我把图片下载到了本地,然后将图片地址保存到数组内,excel下载成功后,再删除掉图片
                         */
                        //将远程图片下载到本地
                        $file = file_get_contents($value[$fieldArr[$i]]);
                        $fileArr = explode('/', $value[$fieldArr[$i]]);
                        $filename = dirname(__FILE__)."/img/".end($fileArr);
                        file_put_contents($filename, $file);
    
                        //处理图片 ,设置图片宽高
                        $phpexcel->getActiveSheet()->getRowDimension($key)->setRowHeight(60);  //获取图片
    
                        $objDrawing->setPath($filename);
    
                        $objDrawing->setHeight(50);//照片高度
    
                        $objDrawing->setWidth(50); //照片宽度  /*设置图片要插入的单元格*/
    
                        $objDrawing->setCoordinates($copy[$i] . $key);  // 图片偏移距离
    
                        $objDrawing->setOffsetX(12);
    
                        $objDrawing->setOffsetY(12);
    
                        $objDrawing->setWorksheet($phpexcel->getActiveSheet());
                        
                        //这一步将图片地址保存
                        $copy_img[] = $filename;
                    }else{
                        $phpexcel->getActiveSheet()->setCellValue($copy[$i] . $key, $value[$fieldArr[$i]]);
                    }
                }
            }
            
    //        //下载到服务器,返回文件地址 
    //        {
    //            $sheet = $title . '.xlsx';
    //            $url = 'img/'.$sheet;
    //            (new PHPExcel_Writer_Excel2007($phpexcel))->save($url);
    //            //这一步删除远程文件在本地或者服务器上的地址。
    //            //注意,必须等到文件下载成功后在执行删除,否则文件会找不到当前这个图片地址报错
    //            if(!empty($copy_img))
    //            {
    //                foreach ($copy_img as $k => $v)
    //                {
    //                    unlink($v);
    //                }
    //            }
    //            return '/upload/' . $sheet;
    //        }
            
            //下载到本地,浏览器下载
            {
                $write = new PHPExcel_Writer_Excel2007($phpexcel);
                header("Pragma: public");
                header("Expires: 0");
                header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
                header("Content-Type:application/force-download");
                header("Content-Type:application/vnd.ms-execl");
                header("Content-Type:application/octet-stream");
                header("Content-Type:application/download");;
                header('Content-Disposition:attachment;filename='.$title.'xls');
                header("Content-Transfer-Encoding:binary");
                //这一步删除远程文件在本地或者服务器上的地址。
                //注意,必须等到文件下载成功后在执行删除,否则文件会找不到当前这个图片地址报错
                if(!empty($copy_img))
                {
                    foreach ($copy_img as $k => $v)
                    {
                        unlink($v);
                    }
                }
                $write->save('php://output');
            }
            
        }

    根据类似的参数调用此方法,文件将保存到服务器,下载即可,或者直接调用方法输出到浏览器下载

  • 相关阅读:
    simple-LDAP-auth
    User Attributes
    webpack 模块标识符(Module Identifiers)
    详解webpack中的hash、chunkhash、contenthash区别
    [转] 插件兼容CommonJS, AMD, CMD 和 原生 JS
    Exif.js 读取图像的元数据
    [转] 跨域
    [转] 理解Web路由
    [转] React 是什么
    [转] Web MVC简介
  • 原文地址:https://www.cnblogs.com/bkhdd/p/15129048.html
Copyright © 2011-2022 走看看