亚洲必赢手机入口_亚洲必赢官网_www.633.net

tp5 Excel 文件 数据导入到数据表中


image.png


前端代码

<table class="table table-bordered">
    <tr>
        <th width="100">选择文件<span class="form-required">*</span></th>
        <td>
            <input type="file" required accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" name="file">
        </td>
    </tr>
</table>

数据表结构

image.png



Excel模板

image.png

image.png


具体实现代码

需要加载的扩展包 下载地址: /soft/check/10.html


 /**
    * 导入数据
    */
   public function importPost(){

       $user_id = get_current_admin_id();
       $file = $this->request->file('file');
       if(!$file){
           $this->error('文件不存在');
       }
       //保存文件
       $info = $file->move(ROOT_PATH . 'public' . DS . 'upload');
       if(!$info){
           $this->error($file->getError());
       }
       //文件路径
       $filepath =   ROOT_PATH.'public' . DS . 'upload'. DS .$info->getSaveName();

       $filename = "/public/upload/".str_replace('\\','/',$info->getSaveName());

       Loader::import('classes.PHPExcel',EXTEND_PATH,'.htmp');

       try{
           //$objReader = new \PHPExcel_Reader_Excel5();//注意和导出的类不一样哦
           $objReader = new \PHPExcel_Reader_Excel2007();//注意和导出的类不一样哦
           $objPHPExcel = $objReader->load($filepath); //上传的文件,或者是指定的文件
       }catch (\Exception $e){
           $this->error($e->getMessage());
       }

       $sheet = $objPHPExcel->getSheet(0);
       $highestRow = $sheet->getHighestRow(); // 取得总行数

       if($highestRow < 2){
           $this->error('文件中没有数据');
       }
       $recharge = array();
       $res = [];
       for ($j=2;$j<=$highestRow;$j++){
           $res['id'] = (int)$objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();//获取A列的值
           $day = $objPHPExcel->getActiveSheet()->getCell("B".$j)->getValue();//获取B列的值
           $res['day'] =   date('Y-m-d ', ($day - 25569) * 24*60*60 ); //获得秒数;
           $res['ring'] = (string)$objPHPExcel->getActiveSheet()->getCell("C".$j)->getValue();//获取C列的值
           $res['result'] = (string)$objPHPExcel->getActiveSheet()->getCell("D".$j)->getValue();//获取D列的值
           $res['user_id'] = $user_id;
           $recharge[] = $res;
       }

       //取得戒由解释
       $sheet1 = $objPHPExcel->getSheet(1);
       $highestRow1 = $sheet1->getHighestRow(); // 取得总行数

       if($highestRow1 < 2){
           $this->error('文件中戒由的解释数据为空');
       }
       $recharge1 = array();
       $res1 = [];
       for ($j=2;$j<=$highestRow1;$j++){
           $res1['id'] = (int)$objPHPExcel->setActiveSheetIndex(1)->getCell("A".$j)->getValue();//获取A列的值
           $res1['content'] = (string)$objPHPExcel->setActiveSheetIndex(1)->getCell("B".$j)->getValue();//获取B列的值
           $recharge1[] = $res1;
       }

       //整合数据
       foreach ($recharge as $key=>$val){
           foreach ($recharge1 as $key1=>$val1){
               if($val['id'] == $val1['id'] ){
                   $val['content'] = $val1['content'];
               }
           }
           $recharge[$key] = $val;
       }


       Db::startTrans();
       try{

           $ringTempModel = new RingTempModel();
           $ringTempModel->saveAll($recharge,false);

           $result = RingTempModel::where('user_id',$user_id)
               ->select()
               ->hidden(['id','user_id'])
               ->toArray();

           $ringModel = new RingModel();
           $ringModel->saveAll($result,false);

           //删除中转库中的数据
           RingTempModel::where('user_id',$user_id)->delete();
           //TODO 删除已上传的文件
//            @unlink($filename);

           Db::commit();
           $this->success('导入成功',url('AdminRing/index'));

       }catch (Exception $e){
//            @unlink($filename);
           Db::rollback();
           $this->error($e->getMessage());
       }
   }

另外这个删除文件有点问题。。还没有搞明白  一直路径不对。。在研究中。。。

来源: up61技术博客 欢迎分享 (QQ:529857614)

qq交流群:63739043 up61博客-php交流群

上一篇: php把excel数值格式转成日期格式问题
下一篇: 在linux修改文件夹及其子文件夹的权限



Baidu
sogou