PHPExcel实现导入功能

/**
 * 处理Execl表格导入
 * @param $token
 * @return array
 */
public function importExcel(){
    header("Access-Control-Allow-Origin: *");
    header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
    header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With');
    header('Access-Control-Allow-Credentials: true');
    header("content-type:text/html; charset=utf-8");
  
    //获取文件上传信息
    $execl_file = request()->file('file');        //前端代码自己写,发起请求到 该类的importExcel方法
   $file_path = $this->moveToUpload($execl_file);
     if(!empty($file_path)){
       $data =$this->handleExcelFile($file_path);
        return $data;
     }else{
       return '';
   }

   //遍历data数据  写入数据库  添加方法自己写,我这是调用自己之前写的
for ($j=0; $j$value){
        foreach ($data[$j][$key] as $k=>$v){
            $save_data = [
                'subject_code' =>$data[$j][$key]['A'],
                'subject_name'  =>$data[$j][$key]['B'],
            ];
        }
        $logicSubject =Loader::model('Subjectcode','logic');
        $logicSubject->addSubject($save_data);
    }
}
}
  /**
     * 处理获取到的文件移动到uploads下,返回路径
     * @param $request_file 获取到的文件
     * @return array|string 返回移动后的路径
     */
    public function moveToUpload($request_file){
        if(!empty($request_file)){
            //处理文件逻辑,移动到uploads目录下
            $move_files = $request_file->move(ROOT_PATH.'public'.DS.'uploads'.DS);
            if($move_files){
                $file_path = ROOT_PATH.'public'.DS.'uploads'.DS.$move_files->getSaveName();
            }else{
                return retmsg(-1,$request_file->getError(),'移动文件失败');
            }
        }
        return $file_path;
    }

    /**
     * 处理表格中的数据返回所有数据组成的数组
     * @param $file_path 文件路径
     * @return array  文件中的数据,三维数组,如果只有一个sheet,遍历的时候选择 array[0]
     */
    public function handleExcelFile($file_path){
        vendor('PHPExcel.Classes.PHPExcel');
        //获取文件后缀,根据后缀来实例化不同的对象
        $file_suffix = pathinfo($file_path)['extension'];
        switch ($file_suffix){
            case 'xlsx':
                $obj_reader = \PHPExcel_IOFactory::createReader('Excel2007');
                $php_excel = $obj_reader->load($file_path,$encode = 'utf-8');
                break;
            case 'xls':
                $obj_reader = \PHPExcel_IOFactory::createReader('Excel5');
                $php_excel = $obj_reader->load($file_path,$encode = 'utf-8');
                break;
            default:
                return retmsg(-1,'','文件类型不符合要求');
        }
        //获取sheet的个数,遍历每个sheet的数据
        $sheet_count = $php_excel->getSheetCount();
   
        $all_data=[];     //用于保存表中的数据
        for($i=0;   $i<$sheet_count;   $i++){
            $currentSheet  = $php_excel->getSheet($i);   //获取表中的第一个工作表
//                $now_sheet = $php_excel->setActiveSheetIndex($i);//获得当前sheet
            $highestRow = $currentSheet->getHighestRow(); // 获取最大行
            $highestCol = $currentSheet->getHighestColumn();  //获取最大列
            $index = 0;   //有些表某行可能为空,不应该导入,如果不为空才存在  数组中
            //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,从第二行开始,去掉表头字段
       
            for($currentRow = 2; $currentRow<=$highestRow; $currentRow++){
                //从哪列开始,A表示第一列
                for($currentCol ='A'; $currentCol<=$highestCol ;$currentCol++ ){
                    //选中当前坐标
                    $address = $currentCol.$currentRow;
                    //读取数据
                    $cell = $currentSheet->getCell($address)->getValue();
                    //把富文本转换成string格式
                    if($cell instanceof \PHPExcel_RichText){
                        $cell = $cell->__toString();
                    }
                    if(empty($cell) || !is_numeric($cell)){
                        break;
                    }
                    //将单个表格中的数据保存在数组中
                    $all_data[$i][$index][$currentCol] = $cell;
                    $index++;
                }
            }
        }
        return $all_data;
    }

你可能感兴趣的:(TP5)