详解thinkphp实现excel数据的导入导出(附完整案例)


Posted in PHP onDecember 29, 2016

实现步骤:

一:在http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php。

二:导出excel代码实现

/**方法**/
function index(){
    $this->display();
  }
public function exportExcel($expTitle,$expCellName,$expTableData){
    $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
    $fileName = $_SESSION['account'].date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
    $cellNum = count($expCellName);
    $dataNum = count($expTableData);
    vendor("PHPExcel.PHPExcel");
    
    $objPHPExcel = new PHPExcel();
    $cellName = 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','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
    
    $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
    // $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s')); 
    for($i=0;$i<$cellNum;$i++){
      $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]); 
    } 
     // Miscellaneous glyphs, UTF-8  
    for($i=0;$i<$dataNum;$i++){
     for($j=0;$j<$cellNum;$j++){
      $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);
     }       
    } 
    
    header('pragma:public');
    header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
    header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
    $objWriter->save('php://output'); 
    exit;  
  }
/**
   *
   * 导出Excel
   */
  function expUser(){//导出Excel
    $xlsName = "User";
    $xlsCell = array(
    array('id','账号序列'),
    array('truename','名字'),
    array('sex','性别'),
    array('res_id','院系'),
    array('sp_id','专业'),
    array('class','班级'),
    array('year','毕业时间'),
    array('city','所在地'),
    array('company','单位'),
    array('zhicheng','职称'),
    array('zhiwu','职务'),
    array('jibie','级别'),
    array('tel','电话'),
    array('qq','qq'),
    array('email','邮箱'),
    array('honor','荣誉'),
    array('remark','备注')  
    );
    $xlsModel = M('Member');
  
    $xlsData = $xlsModel->Field('id,truename,sex,res_id,sp_id,class,year,city,company,zhicheng,zhiwu,jibie,tel,qq,email,honor,remark')->select();
    foreach ($xlsData as $k => $v)
    {
      $xlsData[$k]['sex']=$v['sex']==1?'男':'女';
    }
    $this->exportExcel($xlsName,$xlsCell,$xlsData);
     
  }

第三:导入excel数据代码

function impUser(){
    if (!empty($_FILES)) {
      import("@.ORG.UploadFile");
      $config=array(
        'allowExts'=>array('xlsx','xls'),
        'savePath'=>'./Public/upload/',
        'saveRule'=>'time',
      );
      $upload = new UploadFile($config);
      if (!$upload->upload()) {
        $this->error($upload->getErrorMsg());
      } else {
        $info = $upload->getUploadFileInfo();
        
      }
    
      vendor("PHPExcel.PHPExcel");
        $file_name=$info[0]['savepath'].$info[0]['savename'];
        $objReader = PHPExcel_IOFactory::createReader('Excel5');
        $objPHPExcel = $objReader->load($file_name,$encode='utf-8');
        $sheet = $objPHPExcel->getSheet(0);
        $highestRow = $sheet->getHighestRow(); // 取得总行数
        $highestColumn = $sheet->getHighestColumn(); // 取得总列数
        for($i=3;$i<=$highestRow;$i++)
        {  
          $data['account']= $data['truename'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue(); 
          $sex = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
          // $data['res_id']  = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
          $data['class'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
          $data['year'] = $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
          $data['city']= $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
          $data['company']= $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
          $data['zhicheng']= $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
          $data['zhiwu']= $objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue();
          $data['jibie']= $objPHPExcel->getActiveSheet()->getCell("K".$i)->getValue();
          $data['honor']= $objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue();
          $data['tel']= $objPHPExcel->getActiveSheet()->getCell("M".$i)->getValue();
          $data['qq']= $objPHPExcel->getActiveSheet()->getCell("N".$i)->getValue();
          $data['email']= $objPHPExcel->getActiveSheet()->getCell("O".$i)->getValue();
          $data['remark']= $objPHPExcel->getActiveSheet()->getCell("P".$i)->getValue();
          $data['sex']=$sex=='男'?1:0;
          $data['res_id'] =1;
          
          $data['last_login_time']=0;
          $data['create_time']=$data['last_login_ip']=$_SERVER['REMOTE_ADDR'];
          $data['login_count']=0;
          $data['join']=0;
          $data['avatar']='';
          $data['password']=md5('123456');       
          M('Member')->add($data);
     
        } 
         $this->success('导入成功!');
    }else
      {
        $this->error("请选择上传的文件");
      }  
     

  }

四、模板代码

<html>
  <head>
    
  </head>
  <body>
  <P><a href="{:U('Index/expUser')}" >导出数据并生成excel</a></P><br/>
    <form action="{:U('Index/impUser')}" method="post" enctype="multipart/form-data">
      <input type="file" name="import"/>
      <input type="hidden" name="table" value="tablename"/>
      <input type="submit" value="导入"/>
    </form>
  </body>
  
</html>

最后下载:demo下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
如何获得PHP相关资料
Oct 09 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
PHP中国际化的字符串排序和比较对象详解
Aug 23 PHP
PHP实现的XML操作类【XML Library】
Dec 29 #PHP
php常用字符函数实例小结
Dec 29 #PHP
php常用正则函数实例小结
Dec 29 #PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 #PHP
php常用数组函数实例小结
Dec 29 #PHP
php正则修正符用法实例详解
Dec 29 #PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 #PHP
You might like
提高php编程效率技巧
2015/08/13 PHP
8个必备的PHP功能开发
2015/10/02 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
canvas的神奇用法
2017/02/03 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
详解Python循环作用域与闭包
2019/03/21 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python无损压缩图片的示例代码
2020/08/06 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
小学生演讲稿
2014/01/12 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
清洁工个人工作总结
2015/03/05 职场文书
签订劳动合同通知书
2015/04/16 职场文书
股东出资协议书
2016/03/21 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android