自定义实现Poi工具类

添加依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

 了解API

HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。
XSSF:Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576,最大列数16384。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的支持低内存占用的操作方式,扩展名为.xlsx。

HSSF:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell   [Excel97-2003版本]
XSSF:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell   [Excel2007版本开始]
SXSSF:SXSSFWorkbook、Sheet、Row、Cell             [内存优化]

以XSSF为例:
XSSFWorkbook 代表一个excel文档对象
XSSFSheet    代表一个excel中的工作表
XSSFRow      代表一个工作表中的一行
XSSFCell     代表一行中的一个单元格

自定义导出工具类

创建注解类

@Target(ElementType.FIELD)   //ElementType.FIELD 当前注解可以添加到类中的属性上
@Retention(RetentionPolicy.RUNTIME)
public @interface MyExcel {

    String value();

}

实体类

public class User {

    @MyExcel(value = "用户编号")
    private int id;

    @MyExcel(value = "姓名")
    private String name;

    @MyExcel(value = "成绩")
    private double score;

工具类

 public static void export2(Class clazz,List list,String sheetName,String path) throws Exception {
        XSSFWorkbook workbook = new XSSFWorkbook();

        XSSFSheet sheet = workbook.createSheet(sheetName);

        XSSFRow row = sheet.createRow(0);

        Field[] fields = clazz.getDeclaredFields();
        int x = 0;
        for (Field field:fields){
            //拿到属性上的注解
            MyExcel annotation = field.getAnnotation(MyExcel.class);
            //判断是否有注解
            if(annotation!=null){
                //有注解则创建表格并填充内容
                row.createCell(x).setCellValue(annotation.value());
                x++;
            }
        }

        for (int i = 0; i < list.size(); i++) {
            XSSFRow row1 = sheet.createRow(i + 1);
            Object o = list.get(i);  //获取类对象
            int y = 0;
            for (Field field:fields) {
                //判断属性上是否有注解
                MyExcel annotation = field.getAnnotation(MyExcel.class);
                if(annotation!=null){
                    //获取属性名
                    String name = field.getName();
                    //通过属性名拿到get方法
                    String methodName ="get"+ name.substring(0, 1).toUpperCase() + name.substring(1);
                    Method method = clazz.getMethod(methodName);
                    //通过方法获取属性
                    Object invoke = method.invoke(o);
                    row1.createCell(y).setCellValue(invoke.toString());
                    y++;
                }
            }
        }
        //输出到指定路径
        workbook.write(new FileOutputStream(path));

    }
原文地址:https://www.cnblogs.com/huahualove/p/13881470.html