详解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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
图象函数中的中文显示
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
php md5下16位和32位的实现代码
Apr 09 PHP
CodeIgniter使用phpcms模板引擎
Nov 12 PHP
preg_match_all使用心得分享
Jan 31 PHP
PHP生成树的方法
Jul 28 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
基于php编程规范(详解)
Aug 17 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
swfupload 多文件上传实现代码
2008/08/27 PHP
PHP单例模式详细介绍
2015/07/01 PHP
php如何获取文件的扩展名
2015/10/28 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
javascript实现留言板功能
2020/02/08 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
python备份文件的脚本
2008/08/11 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
会议室标语
2014/06/21 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
工作证明格式及范本
2014/09/12 职场文书
具结保证书范本
2015/05/11 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
JS中如何优雅的使用async await详解
2021/10/05 Javascript
Python+tkinter实现高清图片保存
2022/03/13 Python