thinkphp3.2.3导入导出Excel数据并封装

根据一个excel导入导出功能进行修复封装

最近做个导入的功能,搜索了一篇导入导出EXCEL,看论坛都说有些问题, 估计是不会用.

代码我进行了修改加工和备注了一下.

1.下载UploadFile.class.php放到/ThinkPHP/Library/Org/Net/目录

UploadFile这个导入文件在TP3.2.3版本中默认没有, 只有个官方的Think下的UpLoad上传类,这个类有些问题, 获取不到上传文件信息. 改了一下Upload文件也没解决. 最后还是找了UploadFile这个文件放进去.

2.下载PHPExcel, 拷贝Class整个文件. 放到ThinkPHP/Library/Vendor/下面,把Class改为PHPExcel

3.导入代码:

  1. //导入操作

  2.     public function impUser(){

  3.         if (!empty($_FILES)) {

  4.             import('Org.Net.UploadFile');

  5.             $config=array(

  6.                 'allowExts'=>array('xlsx','xls'),

  7.                 'savePath'=>'./Uploads/',

  8. //                'saveRule'=>'time',

  9.             );

  10.             $upload = new \UploadFile($config);

  11.             if (!$upload->upload()) {

  12.                 $this->error($upload->getErrorMsg());

  13.             } else {

  14.                 $info = $upload->getUploadFileInfo();

  15.             }

  16.             vendor("PHPExcel.PHPExcel");

  17.             $file_name=$info[0]['savepath'].$info[0]['savename'];

  18.             $objReader = \PHPExcel_IOFactory::createReader('Excel5');

  19.             $objPHPExcel = $objReader->load($file_name,$encode='utf-8');

  20.             $sheet = $objPHPExcel->getSheet(0);

  21.             $highestRow = $sheet->getHighestRow(); // 取得总行数

  22.             $highestColumn = $sheet->getHighestColumn(); // 取得总列数

  23.             for($i=2;$i<=$highestRow;$i++)

  24.             {

  25.                 $data['username'] = $data['mobile'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();

  26.                 $data['nickname'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();

  27.                 $data['status'] =1;

  28.                 $data['group'] =1;

  29.                 $data['addtime']= $data['updatetime'] = time();

  30.                 M('Member')->add($data);

  31.             }

  32.             $this->success('导入成功!');

  33.         }else

  34.         {

  35.             $this->error("请选择上传的文件");

  36.         }

  37.     }

复制代码

导出代码:

  1. //导出操作

  2.     public function exportExcel($expTitle,$expCellName,$expTableData){

  3.         $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称

  4.         $fileName = $expTitle.date('_Ymd_His');//or $xlsTitle 文件名称可根据自己情况设定

  5.         $cellNum = count($expCellName);

  6.         $dataNum = count($expTableData);

  7.         vendor("PHPExcel.PHPExcel");

  8.         $objPHPExcel = new \PHPExcel();

  9.         $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');

  10.         $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格

  11.         $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.'  Export time:'.date('Y-m-d H:i:s'));//第一行标题

  12.         for($i=0;$i<$cellNum;$i++){

  13.             $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);

  14.         }

  15.         // Miscellaneous glyphs, UTF-8

  16.         for($i=0;$i<$dataNum;$i++){

  17.             for($j=0;$j<$cellNum;$j++){

  18.                 $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);

  19.             }

  20.         }

  21.         header('pragma:public');

  22.         header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');

  23.         header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印

  24.         $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

  25.         $objWriter->save('php://output');

  26.         exit;

  27.     }

    复制代码

  1. function expUser($xlsName='', $xlsCell=array(), $xlsModel=''){//导出Excel

  2.         $xlsName  = "User用户数据表";

  3.         $xlsCell  = array(

  4.             array('id','账号序列'),

  5.             array('nickname','名字'),

  6.             array('mobile','手机号'),

  7.             array('status','状态'),

  8.             array('addtime','创建时间'),

  9.         );

  10.         $xlsModel = M('Member');

  11.         $xlsData  = $xlsModel->Field('id,nickname,mobile,status,addtime')->select();

  12.         foreach ($xlsData as $k => $v)

  13.         {

  14.             $xlsData[$k]['status'] = 1 ? '正常':'锁定';

  15.             $xlsData[$k]['addtime'] = date("Y-m-d H:i:s", $v['addtime']);

  16.         }

  17.         $this->exportExcel($xlsName,$xlsCell,$xlsData);

  18.     }

    复制代码

直接覆盖就行, 导入导出都在 ExcelRead 控制器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值