tp5结合PHPExcel插件进行导入导出

复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="/static/js/jquery.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <style type="text/css">

    </style>
    <body>
        <form action="{:url('index/index')}" method="post"  enctype="multipart/form-data">
            <input type="text"  name="seach" value="{$seac}" id="sec"/>
            <input type="submit" value="搜索" onclick="ser()"/>
            <!-- 绑定一个事件去更改form表单的路由地址 -->
            <input type="submit" value="导出" onclick="upaction()"/>
            <!-- accept 可以限制上传时候的 后缀 此方法就是允许 xls  xlsx 等 -->
            <input type="file"  name="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"/>
            <!-- 绑定一个事件去更改form表单的路由地址 -->
            <input type="submit" value="导入" onclick="addmsg()" /><br>
            <input type="hidden" name="show" id="show" value="" readonly="readonly"/>
        </form>
        <div></div>
        <table border="" cellspacing="" cellpadding="" id="table">
            <tr>
                <th><input type="checkbox" name="" id="all" value="" /></th>
                <th>序号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>手机号</th>
            </tr>
            {foreach $list as $li}
            <tr>
                <td><input type="checkbox" name="check" id="ones" value="{$li.id}" /></td>
                <td>{$li.id}</td>
                <td>{$li.name}</td>
                <td>{if $li.sex == '1'}男{elseif $li.sex == '2'}女{else}保密{/if}</td>
                <td>{$li.age}</td>
                <td>{$li.tel}</td>
            </tr>
            {/foreach}
        </table>
        <div id="" style="color: red;">
            一共{$count}条数据
        </div>
        {$list}
    </body>
    <style type="text/css">
        .pagination{
            list-style: none;
            display: flex;
            justify-content: space-around;
            width: 200px;
        }
        .pagination li{
            padding: 3%;
            border-radius: 15px;
        }
        .pagination a{
            color: #000000;
            text-decoration: none;
        }
        .active{
            color: #FFFFFF;
            background-color: aqua;
            padding: 3%;
        }
    </style>
    <script type="text/javascript">
        var  i=0;
        $("#all").on("click",function(){
            if(i==0){
                i=1;
                $("input[name*='check']").each(function(){
                    this.checked=true;
                })
            }else{
                i=0;
                $("input[name*='check']").each(function(){
                    this.checked=false;
                })
            }
        });
        $("input[type=checkbox]").on("click",function(){
            var check=$("input[id=ones]");
            var str=[];
            for(let a=0;a<check.length;a++){
                if(check[a].checked==true){
                    str.push(check[a].value)
                }
            }
            str=str.join();
            $("#show").val(str)
        })
        function ser(){
            // 搜索的时候要把下面隐藏的ID 给清除掉
            $("#show").val('');
        }
        function upaction(){
            let inp=$("input[id=ones]")
            let sec=$("#sec").val();
            if(sec!=''){
                for(let i =0;i<inp.length;i++){
                    if(inp[i].checked==true){
                        alert("不可导出,按条件搜索后不可单选,请取消单选或全选");
                        break;
                    }
                }
                $("form").attr("action","{:url('index/exle')}")
            }else{
                
                $("form").attr("action","{:url('index/exle')}")
            }
        }
        function addmsg(){
            $("form").attr("action","{:url('index/addmsg')}")
        }
    </script>
</html>
复制代码

 上方代码就是 在文件上传时候 JS HTML 所需要的简易代码 里面用到了更改路由   单选反选  选中导出的文件

下方就是控制器中的代码    时要使用的插件

链接:https://pan.baidu.com/s/1k7tGw-W-UHt2bOEb-VNCpg
提取码:6666

放在extend文件里面

 

 

复制代码
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;


class Index extends Controller
{
    
    public function index()
    {
        $count=0;//一共几页
        // 获取搜索内容
        $seac=input("seach");
        // 声明一个空的数组
        $map=[];
        // 如果没有赋值 或者为空就不让他搜索
        if(isset($seac)&&$seac!=''){
            $map['name|tel'] = ['like',"%".$seac."%"];
        }
        $list = Db::name('logins')->where($map)->paginate(4,false,['query'=>["seach"=>$seac]]);
        $lists = Db::name('logins')->where($map)->select();
        $this->assign("list",$list);
        $this->assign("count",count($lists));
        $this->assign("seac",$seac);
        
        return  $this->fetch('index',['array'=>$list]);
    }
    public function exle(){
        $id=input("show");
        if($id!=''){
            $id=explode(",",$id);
        }else{
            $id='';
        }
        $seac = input("seach");
        // 声明一个空的数组
        $map=[];
        if(isset($seac)&&$seac!=''){
            $map['name|tel'] = ['like',"%".$seac."%"];
        }
        
        if($id==''&& $seac==''){
            $img=Db::name('logins')->select();
        }else if($id!=''&& $seac==''){
            $where = array();
            $where['id'] = array('in',$id);
            $img=Db::name('logins')->where($where)->select();
        }else if($seac!=''&& $id==''){
            $img=Db::name('logins')->where($map)->select();
            
        }
        $str='<table border="1" cellspacing="" cellpadding="" id="table">
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>手机号</th>
        </tr>';
        foreach($img as $k){
            if($k["sex"]==1){
                $sex='男';
            }else if($k{"sex"}==2){
                $sex='女';
            }else{
                $sex='保密';
            }
            $str .='<tr>
            <td>'.$k{"id"}.'</td>
            <td>'.$k{"name"}.'</td>
            <td>'.$sex.'</td>
            <td>'.$k{"age"}.'</td>
            <td>'.$k{"tel"}.'</td>
        </tr>
        ';
        }
        $str .="</table>";
        
        $this->downloadExcel($str,'用户');
        
    }
    public function downloadExcel($strTable,$filename)
        {
            header("Content-type: application/vnd.ms-excel");
            header("Content-Type: application/force-download");
            header("Content-Disposition: attachment; filename=".$filename."_".date('Y-m-d').".xlsx");
            header('Expires:0');
            header('Pragma:public');
            echo '<html><meta http-equiv="Content-Type" content="texthtml; charset=utf-8" />'.$strTable.'<html>';
        }
    public function addmsg(){
        $succ=0;
        $err=0;
        import("PHPExcel.PHPExcel",EXTEND_PATH);//引入文件前面是路由地址可以使用 .  来代替  \  后面是框架内部定义的extend开始路径
        $PHPExcel = new \PHPExcel();
        $file = request()->file('file');  
        $info = $file->validate(['size'=>105678,'ext'=>'xlsx,xls,csv'])->move(ROOT_PATH . 'Uploads' . DS . 'Excel');
        $ends= explode('.',$_FILES['file']["name"]);
        $ends = end($ends); 
            $exclePath = $info->getSaveName();  //获取文件名  
            $file_name = ROOT_PATH . 'Uploads' . DS . 'Excel' . DS . $exclePath;   //上传文件的地址
            if($ends=='xlsx'){
                $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
            }else {
                $objReader =\PHPExcel_IOFactory::createReader('Excel5');
            }
            $obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8');  //加载文件内容,编码utf-8  
            $excel_array=$obj_PHPExcel->getsheet(0)->toArray();   //转换为数组格式 
            array_shift($excel_array);  //删除第一个数组(标题);  
            foreach($excel_array as $k=>$v) { 
                $where="name='".$v[0]."'";
                // 此条件是判断循环内的每条数据 是否在数据库已存在存在则不导入
                $rest=Db::name('logins')->where($where)->select();
                if($rest){
                    $err=$err+1;
                    // 统计失败次数
                    // $this->error("导入失败,已存在");
                }else{
                    
                    $data = [];  
                    $data['name'] = $v[0];
                    if($v[1]=='男'){
                        $sex=1;
                    }else if($v[1]=='女'){
                        $sex=2;
                    }else if($v[1]=="保密"){
                        $sex=0;
                    }
                    $data['sex'] = $sex;  
                    $data['age']=$v[2];
                    $data['tel'] = $v[3];
                    
                    $succ=$succ+1;
                    // 统计成功次数
                    $success=Db::name('logins')->insert($data);
                }
            }    
            if($success){
                $this->success("导入成功".$succ."个,失败".$err."个");
            }  else{
                $this->error("导入失败");
            }
        } 
}
复制代码

 

posted @   热心居民  阅读(216)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示