zoukankan      html  css  js  c++  java
  • thinkphp---Excel导入!

    在做项目的时候,很多时候会遇到需要将excel导入到数据库的操作:

    需要用到Excel类:

    下载地址:

    https://gitee.com/meiyouzhanghao/excel

    位置:Thinkphp / Library / Org / Util 

    获取Excel 方法:

    //获取excel文件、读取数据方法  
    public function getdata($file_name,$exts='xls'){            
        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入  
        import("Org.Util.PHPExcel", '', '.php');  
        //创建PHPExcel对象,注意,不能少了  
        $PHPExcel=new PHPExcel();
        import("Org.Util.PHPExcel.Reader.Excel5",'','.php');  
        $PHPReader=new PHPExcel_Reader_Excel5();  
        //载入文件  
        $PHPExcel=$PHPReader->load($file_name);  
        //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推  
        $currentSheet = $PHPExcel->getSheet(0);  
        //获取总列数  
        $allColumn = $currentSheet->getHighestColumn();  
        //获取总行数  
        $allRow = $currentSheet->getHighestRow();  
        $excelData = array();   
        //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始  
        for($currentRow = 2; $currentRow <= $allRow; $currentRow ++){  
            //从哪列开始,A表示第一列  
            for($currentColumn='B';$currentColumn<=$allColumn;$currentColumn++){  
                //数据坐标  
                $address=$currentColumn.$currentRow;  
                //读取到的数据,保存到数组$arr中  
                 $excelData[$currentRow][$currentColumn] = $currentSheet-> getCell($address)-> getValue();
            }
        }  
        return $excelData;
    }

    导入操作:

    public function test(){
      $filePath = "./Uploads/201111.xls";
      $data = $this->getdata($filePath);
      pd($data); // 得到数据 批量循环插入
      $UserDB = M('user');
      foreach($data as $k=>$v){
        $data = array();
        $data['name'] = $v['B'];
        $data['age'] = $v['C'];
        $data['city'] = $v['D'];
        // $UserDB->add($data);
      }
    }

    需要导入的Excle.xls

    上面 $data = $this->getdata($filePath); 获取的数据:

    参考:导入操作

    //导入Excel方法操作  
    public function importExp(){  
        header("Content-type: text/html;charset=utf-8");//设置页面内容是html编码格式是utf-8  
        $m=D("Webinfo");//连接数据表 
        $cell=array();    
        //导入Excel前要上传Excel文件到项目文件夹,如果成功进行,如果失败提示错误信息  
        //I('post.ExcelURL','','htmlspecialchars')为获取上传控件传来的文件名称  
        if(I('post.ExcelURL','','htmlspecialchars')!=""){  
            $uploads="Uploads";  
            $upload = new ThinkUpload();// 实例化上传类  
            $upload->maxSize   =     5242880 ;// 设置附件上传大小  
            $upload->exts      =     array('xlsx','xls');// 设置附件上传类型  
            $upload->rootPath  =      './'.$uploads.'/'; // 设置附件上传根目录  
            $upload->subName  = array('date','Ym');  
            // 上传单个文件   
            $info   =   $upload->uploadOne($_FILES['excel']);  
              
            if(!$info) {// 上传错误提示错误信息  
                $this->error($upload->getError());  
            }else{  
                //上传Excel成功  
                $exts = $info['ext'];  
                    $file_name=$uploads.'/'.$info['savepath'].$info['savename'];  
                    $res=$this->getdata($file_name,$exts);  
                  
                //循环读取每行数据,进行写入数据库  
                foreach ( $res as $k => $v )  
                {  
                    if ($k != 0)   
                    {     
                        //获取数据库中的最大ID自增加1  
                        $m->create();  
                        $id=$m->max('ID');  
                          
                        if($id==0||$id==NULL||$id==""){  
                            $id=1;  
                        }  
                        else  
                        {  
                            $id=$id+1;  
                        }  
                        //读取数据后赋给数组data  
                        $data['ID']=$id;  
                        $data ['Name'] = $v [B];  
                        $data ['Site'] =  $v [C];  
    
                        $result = $m->add($data);//添加操作  
                          
                    }  
                }  
                  
                if($result!=0){  
                      
                    $this->success('网站数据导入成功');  
                      
                }else{  
                      
                    $this->error('网站数据导入失败');  
                      
                }  
            }  
        }  
        else  
        {  
            $this->error("请选择上传的文件");  
        }  
    }

     导出 Excel:

    数据结构:

    具体方法:

    public function testOne(){
      $UserDB = M('user');
      $UserList = $UserDB->select();
      $filename = "用户信息表";
      $header = array('id','名字','年纪','城市');
      $this->getExcel($filename,$header,$UserList);//调用导出引用方法 
    }

    具体导出方法:

    //导出引用方法  
    public  function getExcel($fileName,$headArr,$data){  
        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入  
        import("Org.Util.PHPExcel", '', '.php');
        import("Org.Util.PHPExcel.Writer.Excel5",'','.php'); 
        import("Org.Util.PHPExcel.IOFactory.php");
    
        $date = date("Y_m_d",time());  
        $fileName .= "_{$date}.xls";  
    
        //创建PHPExcel对象,注意,不能少了  
        $objPHPExcel = new PHPExcel();  
        $objProps = $objPHPExcel->getProperties();  
    
        //设置表头  
        $key = ord("A");  
        //print_r($headArr);exit;  
        foreach($headArr as $v){  
            $colum = chr($key);  
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);  
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);  
            $key += 1;  
        }  
    
        $column = 2;  
        $objActSheet = $objPHPExcel->getActiveSheet();  
    
        //print_r($data);exit;  
        foreach($data as $key => $rows){ //行写入  
            $span = ord("A");  
            foreach($rows as $keyName=>$value){// 列写入  
                $j = chr($span);  
                $objActSheet->setCellValue($j.$column, $value);  
                $span++;  
            }  
            $column++;  
        }  
    
        $fileName = iconv("utf-8", "gb2312", $fileName);  
    
        //重命名表  
        //$objPHPExcel->getActiveSheet()->setTitle('test');  
        //设置活动单指数到第一个表,所以Excel打开这是第一个表  
        $objPHPExcel->setActiveSheetIndex(0);  
        ob_end_clean();//清除缓冲区,避免乱码  
        header('Content-Type: application/vnd.ms-excel');  
        header("Content-Disposition: attachment;filename="$fileName"");  
        header('Cache-Control: max-age=0');  
    
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  
        $objWriter->save('php://output'); //文件通过浏览器下载  
        exit;
    }

    导出方法示例:

    //全部导出数据方法  
    public function allExp(){  
      //链接所导出的数据表  
      $xlsModel = D('Webinfo');
      //“WID,WName,WebSite,Remark”为所查询的字段,“Status=2”查询条件  
      $goods_list  = $xlsModel->relation(TRUE)->field('WID,WName,WebSite,Remark')->where('Status=2')->select();  
      $count=1;//导出Excel序号排列    
      $data = array();  
      //循环查询后的数据,进行每一列  
      foreach ($goods_list as $k=>$goods_info){  
          $data[$k][ID] = $count++;//序号列  
          $data[$k][Name] = $goods_info['Name'];//名称列  
          $data[$k][ebSite] = $goods_info['Site'];//地址列  
          $data[$k][Remark] = $goods_info['Remark'];//备注列  
      }
      //每列表的名称  
      foreach ($data as $field=>$v){  
          if($field == 'ID'){  
              $headArr[]='序号';  
          }  
    
          if($field == 'Name'){  
              $headArr[]='名称';  
          }  
    
          if($field == 'Site'){  
              $headArr[]='网址';  
          }  
    
          if($field == 'Remark'){  
              $headArr[]='备注';  
          }  
      }
      $filename="网站信息数据表";//所导出的保存文件名称  
      $sss=$this->getExcel($filename,$headArr,$data);//调用导出引用方法            
    }
  • 相关阅读:
    bzoj4195 [Noi2015]程序自动分析
    bzoj4236 JOIOJI hash 模拟
    bzoj1012 [JSOI2008]最大数maxnumber
    day 4 名片管理系统 -函数版
    day 3 局部变量 全局变量
    day 2 函数的嵌套
    day1 函数 (独立功能代码块)
    day 14 元组
    day 13 字典dict 操作
    day 12 列表字典 补充
  • 原文地址:https://www.cnblogs.com/e0yu/p/9087766.html
Copyright © 2011-2022 走看看