java jxl 导入excel_Java JXL利用反射实现通用的excel导入导出

1 packagecom.util;2

3 importjava.io.File;4 importjava.lang.reflect.Field;5 importjava.util.ArrayList;6

7 importcom.bean.Book;8

9 importjxl.Sheet;10 importjxl.Workbook;11 importjxl.write.Label;12 importjxl.write.WritableSheet;13 importjxl.write.WritableWorkbook;14

15 public classExcelUtil {16 //第一个参数为要导出的数据的实体类的对象,实例类不确定,第二个参数为导入路径

17 public static voidexcleOut(ArrayList ar,String str){18 WritableWorkbook book = null;//编写WritableWorkbook对象,该对象代表了excel对象

19 try{20 book = Workbook.createWorkbook(new File(str));//创建文件路径str

21 WritableSheet sheet = book.createSheet("sheet",0);//获取sheet对象22 //对集合进行遍历

23 for(int i = 0; i < ar.size();i++){24 Object ob = ar.get(i);//集合中的对象不确定,用Object代替25 //利用反射机制

26 Class cl = ob.getClass();//运行时获得传递过来的对象

27 Field[] fi = cl.getDeclaredFields();//获取所有属性的对象,用来获取属性

28 for(int j = 0; j

29 fi[j].setAccessible(true);//启用访问权限30 //获取值 列(j),行(i),值fi[j]为字符串方式

31 Label la = newLabel(j, i, String.valueOf(fi[j].get(ob)));32 sheet.addCell(la);//将数据写入sheet对象中

33 }34 }35 book.write();36 } catch(Exception e) {37 e.printStackTrace();38 }finally{39 try{40 book.close();41 } catch(Exception e) {42 e.printStackTrace();43 }44 }45 }46 //第一个参数为要导入的数据的实体类的对象,第二个参数为导入路径

47 public staticArrayList excleIn(Class cl,String str){48 ArrayList ar =new ArrayList();//创建空的集合用于存储数据

49 Workbook book = null;//声明一个workbook对象

50 try{51 book =Workbook.getWorkbook(new File(str));//获取到类对象

52 Sheet sheet = book.getSheet(0);//获取sheet对象

53 Field []fi = cl.getDeclaredFields();//获取类属性信息

54 for(int i = 0;i < sheet.getRows();i++){//对读取进来的excle数据进行遍历

55 Object ob = cl.newInstance();//创建实例化对象,创建新的存储数据的对象,用Object对象代替56 //将所有的属性封装到对象中

57 for(int j = 0;j

58 fi[i].setAccessible(true);//启用属性访问权限

59 String con = sheet.getCell(j,i).getContents();//从excel中读取数据60 //判断属性的类型

61 if(fi[j].getType().toString().equals("Class java.lang.String")){62 //将读入的数据(在con中)封装到对象(ob)的属性(fi[i])中

63 fi[j].set(ob,con);//ob.id=con正常方法

64 }else if(fi[j].getType().toString().equals("int")){65 fi[j].setInt(ob,Integer.valueOf(con));//将信息封装到对象中

66 }else if(fi[j].getType().toString().equals("Integer")){67 fi[j].setInt(ob,Integer.valueOf(con));//将信息封装到对象中

68 }69

70 ar.add(ob);71 }72 }73 } catch(Exception e) {74 e.printStackTrace();75 }finally{76 book.close();77 }78 returnar;79

80 }81

82 public static voidmain(String[] args) {83 //ArrayList arrayList = new ArrayList();84 //Book book = new Book();85 //book.setId(1);86 //book.setName("Java语言");87 //book.setType("面向对象");88 //Book book1 = new Book();89 //book1.setId(2);90 //book1.setName("西游记");91 //book1.setType("故事");92 //Book book2 = new Book();93 //book2.setId(3);94 //book2.setName("高数");95 //book2.setType("难");96 //arrayList.add(book);97 //arrayList.add(book1);98 //arrayList.add(book2);99 //ExcelUtil.excleOut(arrayList,"D:/Sourcecode/Java/fanshe/book1.xls");100 //导入的数据位Book类型

101 ArrayList ar = ExcelUtil.excleIn(Book.class,"D:/Sourcecode/Java/fanshe/book1.xls");102 for(Book bo:ar){103 System.out.println(bo.getId()+" "+bo.getName()+" "+bo.getType());104 }105 }106

107 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值