一、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表格,然后下载就可以了