thinkphp excel 上传 下载 个人任务实例

接到的任务是将excel 中的数据 先预览到前端页面 之后 在插入到数据库中   这里就要用到的东西就是咱们的PHPexcel 这个百度一下就好  

之后把下载的文件 放到vendor 下面 

这个路径一定要记住了   引用好  

 vendor("PHPExecl.PHPExcel");
 vendor("PHPExcel.PHPExcel.PHPExcel_IOFactory"); 
 vendor("PHPExcel.PHPExcel.Reader.Excel5");
这是楼主的引用方式 跟我一样就好 这三个文件一个不能少  。

前端的话就是一个 简单的input 上传标签 ,文件必须上传 才能 读取 , 所以先要上传  读取数据

if (!empty($_FILES)) {
      cookie('filesname',$_FILES['files']['name']);
       $config=array(
        'maxSize' => '3145728',
        'exts'=>array('xlsx','xls'),
        'rootPath'  => './',
        'savePath'=>'./Public/upload/',
        'saveRule'=>'time',
       );
       $upload = new \Think\Upload($config);
       $info =$upload->upload();
       if (!$info) {
        $this->error($upload->getError());
       } 
上传之后存入到$info 变量中 之后要用到 ,其他都是正常的上传设置 不在多说。

  $objPHPExcel = new \PHPExcel();
这一步非常关键 实例化 phpexcel  这里要注意命名空间的问题 楼主在这个位置 爬坑 爬了半天 那个反斜扛 切记切记 。

 $file_name=$info['files']['savepath'].$info['files']['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=2;$i<=$highestRow;$i++){
             $flag=1;
            foreach ($data as $key => $value) {
              $number=65;                                           //大写字母
              $number+=$key;
              $date[$value]=$objPHPExcel->getActiveSheet()->getCell(chr($number).$i)->getValue();
             }
}
通过 反编译ASCII 码 把ABCDE...... 遍历出来
接下来就是把 读取到的东西 写好 返回到前端我这里是用 ajax 所以
unlink($file_name);
$this->ajaxReturn($result);

这里把 上传的文件删掉了  因为之前已经把数据保存到session了,这中间 还有一部分 check验证 将可以成功上传的条目和不能成功上传的条目都显示出来 。



想要了解这个是怎么实现的可以关注我的下一篇博客 将详细讲解

这样就把 整个文件 在页面预览出来了  可以上传的 不能上传的也分类打印 一目了然; 分别加个button 控制上传和下载就可以了。

  function jointable(){
              $user=M(session('table'));
              $date=session('space');
              foreach ($date as $key => $value) {
                $user->add($value,$options=array(),$replace=true);
              }
              $this->ajaxReturn(1);
            }

上传的  一目了然,按部就班的来 。

接下来就是下载了。 将错误的信息条目导出到一个新的表格中 下载下来 。

 public function outexcel(){
            //引入PHPExcel库文件
            vendor("PHPExecl.PHPExcel");
            vendor("PHPExcel.PHPExcel.PHPExcel_IOFactory"); 
            vendor("PHPExcel.PHPExcel.Reader.Excel5");
            //创建对象
            $excel = new \PHPExcel();
            $num=65;              //  大写字母 A
            //填充表头信息
            $table=session('table');
            $head=M('main');
            $map=array('main_id'=>$table);
            $header=$head->where($map)->select();
            foreach ($header[0] as $key => $value) {
              if ($key>0&&$value!="") {
                $tableheader[]=$value;
                    //EXCEL 表头值 中文字段
                $letter[]=chr($num);    // excel列 值 ABCDEFG...
                $num++;
              }
            }           
            for($i = 0;$i < count($tableheader);$i++) {
                $excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
            }
            //表格数组
            $data = session('roow');
            //填充表格信息
            for ($i = 2;$i <= count($data)+1;$i++) {
                $j = 0;
                foreach ($data[$i - 2] as $key=>$value) {
                $excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value");
                $j++;
                }
            }
            //创建Excel输入对象
            $write = new \PHPExcel_Writer_Excel5($excel);
            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
            header("Content-Type:application/force-download");
            header("Content-Type:application/vnd.ms-execl");
            header("Content-Type:application/octet-stream");
            header("Content-Type:application/download");
            header('Content-Disposition:attachment;filename="出错条目信息".xls"');
            header("Content-Transfer-Encoding:binary");
            $write->save('php://output');
            
        }

这里有一个查询 表头数据的 这个是我在数据库中新建了一个表 存放各种表的表头数据的,这里讲他找到 打印出来。
	    $table=session('table');
            $head=M('main');
            $map=array('main_id'=>$table);
            $header=$head->where($map)->select();
剩下的 都是套路 拷贝就可以 记住 引用文件千万不要出错就可以了。

如果有什么问题 欢迎与我联系 。 

本人第一次 写博客 也是第一篇 希望看官们 多多批评指正 ,先谢过了!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值