zoukankan      html  css  js  c++  java
  • 自定义实现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));
    
        }
  • 相关阅读:
    为什么硬链接不能链接目录、文件inode 和目录 dentry 的区别联系
    LVM 详解
    pwd 命令详解
    type 命令详解
    查看文件中字符出现次数
    lesson
    xml linq
    新系统配置
    空合并运算符(??):
    dos.ORM配置和使用
  • 原文地址:https://www.cnblogs.com/huahualove/p/13881470.html
Copyright © 2011-2022 走看看