thinkphp实现excel数据的导入导出

 

thinkphp实现excel数据的导入导出


首先需要确认项目内是否存在
ThinkPHP/Library/Org/Util/PHPExcel
ThinkPHP/Library/Org/Util/PHPExcel.class.php
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //模板代码  
  2.     <html>  
  3.             <head></head>  
  4.         <body>  
  5.           <P><a href="{:U('Index/allExp')}" >导出数据并生成excel</a></P><br/>  
  6.   
  7.         <form action="{:U('Index/importExp')}" method="post" enctype="multipart/form-data" >  
  8.   
  9.               <div>  
  10.                 <label>Excel文件地址</label>  
  11.                 <div>  
  12.                   <input type="text" id="ExcelURL" name="ExcelURL" >  
  13.                 </div>  
  14.                 <div>  
  15.                  <button type="button">选择文件</button>  
  16.           <input id="doc-form-file" type="file" name="excel"  multiple>  
  17.           </div>  
  18.               </div>  
  19.                
  20.               <div class="am-form-group">  
  21.                     <div id="imgPreview" >  
  22.                         <img id="img1" src=<pre name="code" class="html">"" alt="" width="200" height="200"/>  
  23.                     </div>   
  24.               </div>  
  25.              
  26.               <div>  
  27.                 <div>  
  28.                   <button type="submit">导入</button>  
  29.                 </div>  
  30.               </div>  
  31.               </form>  
  32.     </body>  
  33.     </html>  

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //导入Excel方法操作  
  2.     public function importExp()  
  3.     {  
  4.         header("Content-type: text/html;charset=utf-8");//设置页面内容是html编码格式是utf-8  
  5.         $m=D("Webinfo");//连接数据表  
  6.           
  7.         $cell=array();  
  8.   
  9.         //导入Excel前要上传Excel文件到项目文件夹,如果成功进行,如果失败提示错误信息  
  10.         //I('post.ExcelURL','','htmlspecialchars')为获取上传控件传来的文件名称  
  11.         if(I('post.ExcelURL','','htmlspecialchars')!="")  
  12.         {  
  13.             $uploads="Uploads";  
  14.             $upload = new \Think\Upload();// 实例化上传类  
  15.             $upload->maxSize   =     5242880 ;// 设置附件上传大小  
  16.             $upload->exts      =     array('xlsx','xls');// 设置附件上传类型  
  17.             $upload->rootPath  =      './'.$uploads.'/'// 设置附件上传根目录  
  18.             $upload->subName  = array('date','Ym');  
  19.             // 上传单个文件   
  20.             $info   =   $upload->uploadOne($_FILES['excel']);  
  21.               
  22.             if(!$info) {// 上传错误提示错误信息  
  23.                 $this->error($upload->getError());  
  24.             }else{  
  25.                 //上传Excel成功  
  26.                 $exts = $info['ext'];  
  27.                     $file_name=$uploads.'/'.$info['savepath'].$info['savename'];  
  28.                     $res=$this->getdata($file_name,$exts);  
  29.                   
  30.                 //循环读取每行数据,进行写入数据库  
  31.                 foreach ( $res as $k => $v )  
  32.                 {  
  33.                     if ($k != 0)   
  34.                     {     
  35.                         //获取数据库中的最大ID自增加1  
  36.                         $m->create();  
  37.                         $id=$m->max('ID');  
  38.                           
  39.                         if($id==0||$id==NULL||$id==""){  
  40.                             $id=1;  
  41.                         }  
  42.                         else  
  43.                         {  
  44.                             $id=$id+1;  
  45.                         }  
  46.                         //读取数据后赋给数组data  
  47.                         $data['ID']=$id;  
  48.                         $data ['Name'] = $v [B];  
  49.                         $data ['Site'] =  $v [C];  
  50.   
  51.                         $result = $m->add($data);//添加操作  
  52.                           
  53.                     }  
  54.                 }  
  55.                   
  56.                 if($result!=0){  
  57.                       
  58.                     $this->success('网站数据导入成功');  
  59.                       
  60.                 }else{  
  61.                       
  62.                     $this->error('网站数据导入失败');  
  63.                       
  64.                 }  
  65.             }  
  66.         }  
  67.         else  
  68.         {  
  69.             $this->error("请选择上传的文件");  
  70.         }  
  71.     }  
  72.   
  73.     //获取excel文件、读取数据方法  
  74.     public function getdata($file_name,$exts='xls')  
  75.     {  
  76.           
  77.         //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入  
  78.         import("Org.Util.PHPExcel");  
  79.         //创建PHPExcel对象,注意,不能少了\  
  80.         $PHPExcel=new \PHPExcel();  
  81.           
  82.         if($exts=="xls")  
  83.         {  
  84.             import("Org.Util.PHPExcel.Reader.Excel5");  
  85.             $PHPReader=new \PHPExcel_Reader_Excel5();  
  86.         }  
  87.         else if($exts=="xlsx")  
  88.         {  
  89.             import("Org.Util.PHPExcel.Reader.Excel2007");  
  90.             $PHPReader=new \PHPExcel_Reader_Excel2007();  
  91.         }  
  92.         //载入文件  
  93.         $PHPExcel=$PHPReader->load($file_name);  
  94.         //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推  
  95.         $currentSheet=$PHPExcel->getSheet(0);  
  96.           
  97.         //获取总列数  
  98.         $allColumn=$currentSheet->getHighestColumn();  
  99.           
  100.         //获取总行数  
  101.         $allRow=$currentSheet->getHighestRow();  
  102.           
  103.         $excelData = array();   
  104.         //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始  
  105.         for($currentRow=2;$currentRow<=$allRow;$currentRow++){  
  106.             //从哪列开始,A表示第一列  
  107.             for($currentColumn='B';$currentColumn<=$allColumn;$currentColumn++){  
  108.                 //数据坐标  
  109.                 $address=$currentColumn.$currentRow;  
  110.                 //读取到的数据,保存到数组$arr中  
  111.                  $excelData[$currentRow][$currentColumn] = $currentSheet-> getCell($address)-> getValue();  
  112.                    
  113.             }  
  114.           
  115.         }  
  116.          return $excelData;  
  117.     }  


[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //全部导出数据方法  
  2.         public function allExp()  
  3.         {  
  4.     //链接所导出的数据表  
  5.         $xlsModel = D('Webinfo');  
  6.   
  7.     //“WID,WName,WebSite,Remark”为所查询的字段,“Status=2”查询条件  
  8.         $goods_list  = $xlsModel->relation(TRUE)->field('WID,WName,WebSite,Remark')->where('Status=2')->select();  
  9.   
  10.         $count=1;//导出Excel序号排列  
  11.   
  12.         $data = array();  
  13.     //循环查询后的数据,进行每一列  
  14.         foreach ($goods_list as $k=>$goods_info){  
  15.             $data[$k][ID] = $count++;//序号列  
  16.             $data[$k][Name] = $goods_info['Name'];//名称列  
  17.             $data[$k][ebSite] = $goods_info['Site'];//地址列  
  18.             $data[$k][Remark] = $goods_info['Remark'];//备注列  
  19.         }  
  20.       
  21.     //每列表的名称  
  22.         foreach ($data as $field=>$v){  
  23.             if($field == 'ID'){  
  24.                 $headArr[]='序号';  
  25.             }  
  26.   
  27.             if($field == 'Name'){  
  28.                 $headArr[]='名称';  
  29.             }  
  30.   
  31.             if($field == 'Site'){  
  32.                 $headArr[]='网址';  
  33.             }  
  34.   
  35.             if($field == 'Remark'){  
  36.                 $headArr[]='备注';  
  37.             }  
  38.         }  
  39.           
  40.         $filename="网站信息数据表";//所导出的保存文件名称  
  41.         $sss=$this->getExcel($filename,$headArr,$data);//调用导出引用方法  
  42.           
  43.           
  44.     }  
  45.   
  46.   
  47.     //导出引用方法  
  48.         public  function getExcel($fileName,$headArr,$data)  
  49.         {  
  50.             //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入  
  51.             import("Org.Util.PHPExcel");  
  52.             import("Org.Util.PHPExcel.Writer.Excel5");  
  53.             import("Org.Util.PHPExcel.IOFactory.php");  
  54.   
  55.             $date = date("Y_m_d",time());  
  56.             $fileName .= "_{$date}.xls";  
  57.   
  58.             //创建PHPExcel对象,注意,不能少了\  
  59.             $objPHPExcel = new \PHPExcel();  
  60.             $objProps = $objPHPExcel->getProperties();  
  61.   
  62.             //设置表头  
  63.             $key = ord("A");  
  64.             //print_r($headArr);exit;  
  65.             foreach($headArr as $v){  
  66.                 $colum = chr($key);  
  67.                 $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1'$v);  
  68.                 $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1'$v);  
  69.                 $key += 1;  
  70.             }  
  71.   
  72.             $column = 2;  
  73.             $objActSheet = $objPHPExcel->getActiveSheet();  
  74.   
  75.             //print_r($data);exit;  
  76.             foreach($data as $key => $rows){ //行写入  
  77.                 $span = ord("A");  
  78.                 foreach($rows as $keyName=>$value){// 列写入  
  79.                     $j = chr($span);  
  80.                     $objActSheet->setCellValue($j.$column$value);  
  81.                     $span++;  
  82.                 }  
  83.                 $column++;  
  84.             }  
  85.   
  86.             $fileName = iconv("utf-8""gb2312"$fileName);  
  87.   
  88.             //重命名表  
  89.             //$objPHPExcel->getActiveSheet()->setTitle('test');  
  90.             //设置活动单指数到第一个表,所以Excel打开这是第一个表  
  91.             $objPHPExcel->setActiveSheetIndex(0);  
  92.             ob_end_clean();//清除缓冲区,避免乱码  
  93.             header('Content-Type: application/vnd.ms-excel');  
  94.             header("Content-Disposition: attachment;filename=\"$fileName\"");  
  95.             header('Cache-Control: max-age=0');  
  96.   
  97.             $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel'Excel5');  
  98.             $objWriter->save('php://output'); //文件通过浏览器下载  
  99.             exit;  
  100.               
  101.         }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值