POI Excel表格导入导出时对象的转换

一、poi excel表格导入时对象转换

因为excel表格的没一行即为一个对象,即为Row对象,我们需要把Row对象转换为我们需要的Bean对象,调用一下方法,把一个excel表格数据,转换为一个存Bean实体类的List集合。

以一个Customer对象为例:

//user导入
	 public static List<Customer> row2bean(List<Row> rowList){
	        List<Customer> alluser = new ArrayList<Customer>();
	        for(int i=1;i<rowList.size();i++){
	            Customer u =new Customer();
	            for(int j = 0;j<rowList.get(i).getLastCellNum();j++){
	               System.out.println("-------"+getCellValue(rowList.get(i).getCell(j)));
	                if(getCellValue(rowList.get(i).getCell(j)) != null && !"".equals(getCellValue(rowList.get(i).getCell(j)))){
	                    switch(getCellValue(rowList.get(0).getCell(j))){    //switch循环判断excel表头,case为每条数据对应excel的数据内容,循环为Customer对象赋值
	                        case "姓名":
	                            u.setName(getCellValue(rowList.get(i).getCell(j)));
	                            break;
	                        case "密码":
	                            u.setPassword(getCellValue(rowList.get(i).getCell(j)));
	                            break;
	                        case "性别":
	                        	int s=0;
	                        	String sex=getCellValue(rowList.get(i).getCell(j))+"";
	                        	if(sex.equals("男")){
	                        		s=1;
	                        	}else if(sex.equals("女")){
	                        		s=0;
	                        	}else{
	                        		s=2;
	                        	}
	                           u.setSex(s);
	                           break;
	                        case "注册日期":
	                            u.setCreatetime(getCellValue(rowList.get(i).getCell(j)));
	                            break;
	                        case "状态":
	                        	int s3=1;
	                        	String status=getCellValue(rowList.get(i).getCell(j));
	                        	if(status.equals("可用")){
	                        		s3=1;
	                        	}else if(status.equals("禁用")){
	                        		s3=0;
	                        	}
	                            u.setStatus(s3);
	                            break;
	                        case "备注":
	                            u.setMark(getCellValue(rowList.get(i).getCell(j)));
	                            break;
	                        default:
	                            break;
	                    }
	                }
	            }
	            alluser.add(u);
	        }
	        return alluser;
	    }
	

二、Excel表格的导出时对象转换

一般我们可以得到的数据仅为List集合,而Excel的数据为Row,我们需要把得到的List集合转换为Row对象,然后通过

public static List<Row> bean2row(List<Customer> alluser){
        List<Row> rowList = new ArrayList<Row>();
        HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
        HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象
        DecimalFormat df = new DecimalFormat("0.0"); 
        if(alluser.size() <= 0){
            return null;
        }
        //创建工作表第一行
        Field[] fields = alluser.get(0).getClass().getDeclaredFields();
        Row rowone = sheet.createRow((short)0);
        for(int j = 0;j<fields.length;j++){
        	//name	sex	password	phone	discount	wechat	createtime	canal	status	mark
        	switch(fields[j].getName()){
            case "id":
            	rowone.createCell((short)j).setCellValue("ID");
                break;
            case "name":
            	rowone.createCell((short)j).setCellValue("姓名");
                break;
            case "sex":
            	rowone.createCell((short)j).setCellValue("性别");
                break;
            case "password":
            	rowone.createCell((short)j).setCellValue("密码");
                break;
            case "phone":
            	rowone.createCell((short)j).setCellValue("联系方式");
                break;
            case "wechat":
            	rowone.createCell((short)j).setCellValue("微信");
                break;
            case "createtime":
            	rowone.createCell((short)j).setCellValue("注册日期");
                break;
            
            case "status":
            	rowone.createCell((short)j).setCellValue("状态");
                break;
            case "mark":
            	rowone.createCell((short)j).setCellValue("备注");
                break;
            default:
                break;
        	}
        }
        rowList.add(rowone);
        for(int i = 1;i<alluser.size()+1;i++){
            Row row = sheet.createRow((short)i); //创建Excel工作表的行
            for(int k = 0;k<fields.length;k++){
                switch(fields[k].getName()){	  //此时switch循环的是list集合每个对象,case为每个字段
                    case "id":
                        row.createCell((short)k).setCellValue(alluser.get(i-1).getId());
                        break;
                    case "name":
                        row.createCell((short)k).setCellValue(alluser.get(i-1).getName());
                        break;
                    case "sex":
                    	String str3="保密";
                    	if(alluser.get(i-1).getSex()==0){
                    		str3="女";
                    	}else if(alluser.get(i-1).getSex()==1){
                    		str3="男";
                    	}else if(alluser.get(i-1).getSex()==2){
                    		str3="保密";
                    	}
                        row.createCell((short)k).setCellValue(str3);
                        break;
                    case "password":
                        row.createCell((short)k).setCellValue(alluser.get(i-1).getPassword());
                        break;
                    case "phone":
                        row.createCell((short)k).setCellValue(alluser.get(i-1).getPhone());
                        break;
                    case "wechat":
                        row.createCell((short)k).setCellValue(alluser.get(i-1).getWechat());
                        break;
                    case "createtime":
                        row.createCell((short)k).setCellValue(alluser.get(i-1).getCreatetime());
                        break;
                    case "status":
                    	String str2="可用";
                    	if(alluser.get(i-1).getStatus()==0.0){
                    		str2="禁用";
                    	}else if(alluser.get(i-1).getStatus()==1.0){
                    		str2="可用";
                    	}
                        row.createCell((short)k).setCellValue(str2);
                        break;
                    case "mark":
                        row.createCell((short)k).setCellValue(alluser.get(i-1).getMark());
                        break;
                    default:
                        break;
                }
                 //设置Excel工作表的值
            }
            rowList.add(row);
        }
        return rowList;
    }



通过这两个方法,将数据进行Row和Bean之间的转换,然后调用ExcelUtil(表格数据的写入excel以及excel表格的创建)就可以获取excel表格,然后下载就可以了



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值