欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tp5 PHPExcel 类 导出导入excel 数据库 带图片的那种。。

程序员文章站 2022-05-17 14:24:54
...
  • Phpexcel 类库下载链接:

https://www.php.cn/xiazai/leiku
tp5 PHPExcel 类 导出导入excel 数据库 带图片的那种。。

  1. 目录

  2. tp5 PHPExcel 类 导出导入excel 数据库 带图片的那种。。只需把class文件拿出 放在 tp5 目录下 vendor ,重命名 PHPExcel;

  3. 数据库 和 excel
    tp5 PHPExcel 类 导出导入excel 数据库 带图片的那种。。
    tp5 PHPExcel 类 导出导入excel 数据库 带图片的那种。。

  4. 导出excel(不带图片)

public function excelText()
    {
        $res = Db::table('think_image')->select();
        vendor("PHPExcel.PHPExcel");

        $resultPHPExcel = new \PHPExcel();
//设置参数

//设值

        $resultPHPExcel->getActiveSheet()->setCellValue('A1', '季度');
        $resultPHPExcel->getActiveSheet()->setCellValue('B1', '名称');
        $resultPHPExcel->getActiveSheet()->setCellValue('C1', '数量');
        $i = 2;
        foreach ($res as $item) {
            $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['id']);
            $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['name']);
            $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['image']);
            $i++;
        }
        //设置导出文件名

        $outputFileName = 'total.xls';

        $xlsWriter = new \PHPExcel_Writer_Excel5($resultPHPExcel);

        ob_end_clean();
        header("Content-Type: application/force-download");

        header("Content-Type: application/octet-stream");

        header("Content-Type: application/download");

        header('Content-Disposition:inline;filename="' . $outputFileName . '"');

        header("Content-Transfer-Encoding: binary");

        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

        header("Pragma: no-cache");

        $xlsWriter->save("php://output");
    }
  1. 导出带图片的那种
 //导出图片
    public function excelPhoto()
    {
        $res = Db::table('think_image')->select();
        vendor("PHPExcel.PHPExcel");

        $resultPHPExcel = new \PHPExcel();
//设置参数

//设值

        $resultPHPExcel->getActiveSheet()->setCellValue('A1', 'id');
        $resultPHPExcel->getActiveSheet()->setCellValue('B1', '名称');
        $resultPHPExcel->getActiveSheet()->setCellValue('C1', '图片');
        $i = 2;
        foreach ($res as $item) {
            $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['id']);
            $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['name']);
            $objDrawing = new \PHPExcel_Worksheet_Drawing();
            $objDrawing->setPath('.' . $item['image']);//这里拼接 . 是因为要在根目录下获取
            // 设置宽度高度
            $objDrawing->setHeight(50);//照片高度
            $objDrawing->setWidth(50); //照片宽度
            /*设置图片要插入的单元格*/
            $objDrawing->setCoordinates('C' . $i);
            // 图片偏移距离
            $objDrawing->setOffsetX(0);
            $objDrawing->setOffsetY(0);
            $objDrawing->setWorksheet($resultPHPExcel->getActiveSheet());
            $i++;
        }
        //设置导出文件名

        $outputFileName = 'total.xls';

        $xlsWriter = new \PHPExcel_Writer_Excel5($resultPHPExcel);

        ob_end_clean();
        header("Content-Type: application/force-download");

        header("Content-Type: application/octet-stream");

        header("Content-Type: application/download");

        header('Content-Disposition:inline;filename="' . $outputFileName . '"');

        header("Content-Transfer-Encoding: binary");

        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

        header("Pragma: no-cache");

        $xlsWriter->save("php://output");
    }

6.导入不带图片那种

//导入excel文本
    public function import(Request $request)
    {
        //导入数据
        if (request()->isPost()) {
            vendor("PHPExcel.PHPExcel"); //方法一
            $objPHPExcel = new \PHPExcel();
            //获取表单上传文件
            $file = request()->file('excel');
            $info = $file->validate(['ext' => 'xlsx'])->move(ROOT_PATH . 'public');  //上传验证后缀名,以及上传之后移动的地址  E:\wamp\www\bick\public
            if ($info) {
                $exclePath = $info->getSaveName();  //获取文件名
                $file_name = ROOT_PATH . 'public' . DS . 'excel'.$exclePath;//上传文件的地址
                $objReader = \PHPExcel_IOFactory::createReader("Excel2007");
                $obj_PHPExcel = $objReader->load($file_name, $encode = 'utf-8');  //加载文件内容,编码utf-8
                $excel_array = $obj_PHPExcel->getSheet(0)->toArray();   //转换为数组格式
                array_shift($excel_array);  //删除第一个数组(标题);
                $city = [];
                $i = 0;
                foreach ($excel_array as $k => $v) {
                    $city[$k]['id'] = $v[0];
                    $city[$k]['name'] = $v[1];
                    $city[$k]['image'] = $v[2];
                    $i++;
                }
                Db::table("think_image")->insertAll($city);
            } else {
                echo $file->getError();
            }
        }
    }

7.导入带图片的那种

//导入excel图片
    public function importPhoto(Request $request)
    {

            vendor('PHPExcel.PHPExcel');
            vendor('PHPExcel.PHPExcel.PHPExcel_IOFactory');
            vendor('PHPExcel.PHPExcel.PHPExcel_Cell');

            //从前台获取excel文件
            $file = request()->file('excel');

            //上传该文件
            $path = ROOT_PATH . 'public' . DS . 'excel'.DS;
            $info = $file->move(ROOT_PATH . 'public' . DS . 'excel');//上传位置
            if($info){
                echo '文件上传成功'.'<br/>';
            }
            else{
                echo '文件上传失败'.'<br/>';
            }

            //上传后的EXCEL路径
            $file_path = $path . $info->getSaveName();
            //图片配置******************
            //设置一个存放图片的路径
            $imgPath = ROOT_PATH . 'public' . DS .'images'.DS;
            if(!file_exists($imgPath)){
                mkdir($imgPath);
            }

            //获取文件后缀:xls、xlsx等
            $extension = strtolower(pathinfo($file_path, PATHINFO_EXTENSION) );
            //加上这个判断的目的就是防止报错,但目前只支持Excel5
            if($extension =='xls'){
                $objReader = \PHPExcel_IOFactory::createReader('Excel5');
            }else{
                $objReader = \PHPExcel_IOFactory::createReader('excel2007');
            }

            //载入文件
            $objPHPExcel = $objReader->load($file_path);
////            foreach ($objPHPExcel->getSheet(0)->getDrawingCollection() as $k => $drawing) {
////                $filename = $drawing->getIndexedFilename();  //文件名
////
////                //如果多张图片,就存入数组
////                $filenames[]= '/images/'.$filename;
////                ob_start();
////                call_user_func(
////                    $drawing->getRenderingFunction(),
////                    $drawing->getImageResource()
////                );
////                $imageContents = ob_get_contents();
////                file_put_contents($imgPath.$filename,$imageContents); //把图片保存到本地(上方自定义的路径)
////                ob_end_clean();
////            }
////            //图片配置******************
//
//            halt($filenames);
        foreach($objPHPExcel->getSheet(0)->getDrawingCollection() as $img) {
            list($startColumn,$startRow)= \PHPExcel_Cell::coordinateFromString($img->getCoordinates());//获取图片所在行和列
            $imageFileName = $img->getCoordinates() . mt_rand(100, 999);
            $imageFileName.='.'.substr($img->getMimeType(),6);
            imagepng($img->getImageResource(),$imgPath.$imageFileName);
            $startColumn = $this->ABC2decimal($startColumn);//由于图片所在位置的列号为字母,转化为数字
            $data[$startRow-1][$startColumn]=$imgPath.$imageFileName;//把图片插入到数组中

        }
        ksort($data);
        halt($data);

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

注意:带图片的好像只支持 。.xls 格式的。第一个我已经把图片放到一个数组里面了,只有图片的操作。想要入库结合一个不带图片的,数组合并 insert 就可以入库了。
打完收工》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》