java反射学习之二万能EXCEL导出
一、EXCEL导出的实现过程
假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性;那么我们实现的方式是这样的:
循环这个集合,在循环集合中某个对象的所有属性,将这个对象的所有属性作为EXCEL的列,该对象占据EXCEL的一行
二、万能EXCEL导出(以JXL为例,jxl、poi等excel导入导出的jar包不做介绍了)
1、创建java工程、引入jxl的jar包
2、直接上代码
Book.java
/** * Book对象 * @author bwy * */ public class Book { private String name; private double price; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public Book(String name, double price) { this.name = name; this.price = price; } }
excel工具类ExcelUtil.java
1 /** 2 * EXCEL工具类 3 * 4 * @author bwy 5 * 6 */ 7 public class ExcelUtil { 8 9 /** 10 * excel导出方法 11 * 12 * @param list 13 * 导出的对象集合 14 * @param filePath 15 * 导出路径 16 */ 17 @SuppressWarnings("rawtypes") 18 public static void exportExcel(ArrayList list, String filePath) { 19 20 // 创建workbook对象 21 WritableWorkbook workBook = null; 22 23 // sheet对象 24 WritableSheet sheet = null; 25 try { 26 workBook = Workbook.createWorkbook(new File(filePath)); 27 sheet = workBook.createSheet("book", 0); 28 29 // 循环该对象的集合 30 for (int i = 0; i < list.size(); i++) { 31 32 // 获取对象 33 Object obj = list.get(i); 34 35 // 获取对象的类 36 Class cls = obj.getClass(); 37 38 // 获取该类的所有属性 39 Field[] fis = cls.getDeclaredFields(); 40 41 // 循环类属性 42 for (int j = 0; j < fis.length; j++) { 43 44 // 设置私有属性访问权限,这一步很重要 45 fis[j].setAccessible(true); 46 47 // 创建label 48 Label label = new Label(j, i, fis[j].get(obj).toString()); 49 50 // 放入到sheet中 51 sheet.addCell(label); 52 } 53 } 54 55 // 写文件 56 workBook.write(); 57 } catch (Exception e) { 58 e.printStackTrace(); 59 } finally { 60 61 // 关闭流 62 try { 63 workBook.close(); 64 } catch (WriteException e) { 65 e.printStackTrace(); 66 } catch (IOException e) { 67 e.printStackTrace(); 68 } 69 } 70 } 71 }
最后是测试类 ExcelExportTest.java
1 public class ExcelExportTest { 2 public static void main(String[] args) { 3 Book b1 = new Book("我和凤姐同居的日子",32.00); 4 Book b2 = new Book("HTML5开发手册",18.00); 5 Book b3 = new Book("thiking in java",90.0); 6 Book b4 = new Book("数据结构",22); 7 Book b5 = new Book("* * *思想",10); 8 9 ArrayList<Book> bookList = new ArrayList<Book>(); 10 bookList.add(b1); 11 bookList.add(b2); 12 bookList.add(b3); 13 bookList.add(b4); 14 bookList.add(b5); 15 16 ExcelUtil.exportExcel(bookList,"c:/export.xls"); 17 } 18 }
运行测试类,可以看到,在C盘根目录生成了export.xls文件
当然,这个导出的功能不是最完善的,只是通过这一功能去了解java反射的使用。