thinkPHP5使用PHPExcel导入表格数据

thinkPHP5使用PHPExcel导入表格数据

今天周六,开启新的摸鱼的一天。今天分享的内容是thinkPHP5使用PHPExcel导入表格数据,如果您开发使用的是波波的开发框架tp-admin,那么很高兴的告诉你不用看这篇文章了。波波已经在tp-admin开发框架中集成了PHPOffice组件,并专门开发了OfficeService,比如我们要导入数据只需要一行代码就可以搞定。如下所示:

  1. 第一步:引入服务组件
  2. use service\OfficeService;
  3. 第二步:直接使用
  4. //读取Excel文件内容为Array
  5. OfficeService::getArray(“文件路径”,”字段”);

除了读取成Array数组,还可以一行代码将Excel存入数据库或者导出数据成Excel。

当然了很多人开发可能并没有使用波波的tp-admin后台开发框架,那么下面的内容将帮助大家学习如何从Excel文件导入数据。

第一步:首先下载PHPExcel类库,类库地址:https://github.com/PHPOffice/PHPExcel

类库中有很多文件,我们只需要把Classes文件夹下载下来,放在tp5的vendor目录即可。当然了会composer的用composer安装也是极好的。

第二步:前端上传文件页面。

HTML部分:

  1. <form action="{:url('daoru')}" enctype="multipart/form-data" method="post">
  2.     <div class="layui-upload">
  3.   <button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
  4.   <button type="button" class="layui-btn" id="test9">开始导入到数据库</button>
  5. </div>
  6.  </form>

JS部分:

  1. <script>
  2.  layui.use('upload', function(){
  3.    var $ = layui.jquery
  4.    ,upload = layui.upload;
  5.    //选完文件后不自动上传
  6.    upload.render({
  7.      elem: '#test8'
  8.      ,exts: 'xlsx' //只允许上传压缩文件
  9.      ,url: '{:url('admin/chengji/daoru')}'
  10.      ,auto: false
  11.      //,multiple: true
  12.      ,bindAction: '#test9'
  13.      ,done: function(res){
  14.        console.log(res)
  15.              if(res.code == 1) {
  16.                     layer.msg(res.msg, {'icon': 1});
  17.                     setTimeout(function () {
  18.                             parent.window.location.reload();
  19.                     }, 1000);
  20.              } else {
  21.                     layer.msg(res.msg);
  22.              }
  23.      }
  24.    });
  25.  });
  26.  </script>

第三步:写后端文件处理逻辑。

  1. //批量导入
  2.      public function daoru(){
  3.         if($this->request->isPost()){
  4.       $file = $this->request->file('file');
  5.        // 移动到框架应用根目录/public/uploads/ 目录下
  6.       $info = $file->move(ROOT_PATH . 'public' .DS.'upload'. DS . 'excel');
  7.             if($info){
  8.                 //获取文件所在目录名
  9.                 $path=ROOT_PATH . 'public' . DS.'upload'.DS .'excel/'.$info->getSaveName();
  10.                 //加载PHPExcel类
  11.                 vendor('PHPExcel.PHPExcel');
  12.                 //实例化PHPExcel类(注意:实例化的时候前面需要加'\')
  13.                 $extension = $info->getExtension();
  14.                                 if$extension =='xlsx' )
  15.                                 {
  16.                                 $objReader = new \PHPExcel_Reader_Excel2007();
  17.                                 }else
  18.                                     {
  19.                                 $objReader = new \PHPExcel_Reader_Excel5();
  20.                                 }
  21.                 $objPHPExcel = $objReader->load($path,$encode='utf-8');//获取excel文件
  22.                 $sheet = $objPHPExcel->getSheet(0); //激活当前的表
  23.                 $highestRow = $sheet->getHighestRow(); // 取得总行数
  24.                 $highestColumn = $sheet->getHighestColumn(); // 取得总列数
  25.                 $a=0;
  26.                 //将表格里面的数据循环到数组中
  27.                 for($i=2;$i<=$highestRow;$i++)
  28.                 {
  29.                     //*为什么$i=2? (因为Excel表格第一行应该是姓名,年龄,班级,从第二行开始,才是我们要的数据。)
  30.                     $data[$a]['cj_munuid'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();//届数id
  31.                     $data[$a]['zhunkaozheng'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();//准考证号码
  32.                     $data[$a]['sfz'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();//身份证号码
  33.                                         $data[$a]['xueyuanname'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();//姓名
  34.                                         $data[$a]['zhiye'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();//鉴定职业
  35.                                         $data[$a]['jiebie'] = $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();//级别
  36.                                         $data[$a]['kemu'] = $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();//科目
  37.                                         $data[$a]['lilun'] = $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();//理论成绩
  38.                                         $data[$a]['lilunzhuang'] = $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
  39.                                         $data[$a]['shicao'] = $objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue();
  40.                                         $data[$a]['shicaozhuang'] = $objPHPExcel->getActiveSheet()->getCell("K".$i)->getValue();
  41.                                         $data[$a]['pingding'] = $objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue();
  42.                                         $data[$a]['baomingjigou'] = $objPHPExcel->getActiveSheet()->getCell("M".$i)->getValue();
  43.                      // 这里的数据根据自己表格里面有多少个字段自行决定
  44.                     $a++;
  45.                 }
  46.                 //往数据库添加数据
  47.                                 //dump($data);
  48.                 $aa = Db('chengji')->insertAll($data);
  49.                                 if($aa){
  50.                                     $res['code']=1;
  51.                                     $res['msg'] = '导入成功!';
  52.                                 }else{
  53.                                     $res['code']=0;
  54.                                     $res['msg'] = '导入失败!';
  55.                                 }
  56.                return $res;
  57.             }
  58.         }
  59.          return $this->fetch();
  60.      }

以上分享只是一个简单的示例,实际项目中根据自己需求简单修改行列数据即可。

 

 

波波
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!