首页 > 代码库 > 利用反射实现通用的excel导入导出
利用反射实现通用的excel导入导出
如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出
实例代码如下:
1.创建一个 Book类,并编写set和get方法
1 package com.bean; 2 3 public class Book { 4 private int id; 5 private String name; 6 private String type; 7 // public int a; 8 9 public String getType() { 10 System.out.println("调用了类型方法"); 11 return type; 12 } 13 14 public void setType(String type) { 15 this.type = type; 16 } 17 // public void test (String name,int a){ 18 // System.out.println("调用了多参数的方法"); 19 // } 20 21 public String getName() { 22 System.out.println("调用了名称方法"); 23 return name; 24 } 25 26 public void setName(String name) { 27 this.name = name; 28 } 29 30 public int getId() { 31 System.out.println("调用了序号方法"); 32 return id; 33 } 34 35 public void setId(int id) { 36 this.id = id; 37 } 38 39 }
2.创建一个ExcelUtil类,实现导入导出
1 package com.util; 2 3 import java.io.File; 4 import java.lang.reflect.Field; 5 import java.util.ArrayList; 6 7 import com.bean.Book; 8 9 import jxl.Sheet; 10 import jxl.Workbook; 11 import jxl.write.Label; 12 import jxl.write.WritableSheet; 13 import jxl.write.WritableWorkbook; 14 15 public class ExcelUtil { 16 //第一个参数为要导出的数据的实体类的对象,实例类不确定,第二个参数为导入路径 17 public static void excleOut(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 <fi.length;j++){//将获得的对象遍历出来 29 fi[j].setAccessible(true);//启用访问权限 30 //获取值 列(j),行(i),值fi[j]为字符串方式 31 Label la = new Label(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 static ArrayList 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 <fi.length;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 return ar; 79 80 } 81 82 public static void main(String[] args) { 83 // ArrayList<Book> arrayList = new ArrayList<Book>(); 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<Book> 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 }
运行结果:导出时在指定路径出现excel表格,上面显示导出的数据,如下图所示:
导入时,在控制台输出表格中的信息
利用反射实现通用的excel导入导出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。