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反射的使用。

原文地址:https://www.cnblogs.com/weyoung1987/p/5855011.html