EasyExcel快速入门使用

easyExcel结合Springboot 实战整合 1 背景 项目中使用到了导入导出的功能所以自己写了一个关于POI的工具类和demo,希望能帮到会使用到的朋友。对比了很多市面上的方法,最后还是选择了easyExcel,也把easyExcel的demo也写了,文章底部会有相关跳转连接,跳转到POI的。 2 代码 2.1 依赖 easyExcel是封装了poi 所以还是会用到poi的依赖,这里是需要导入的 <dependenc... 阅读详情

详情查看easyExcel官方

一、Mavem配置

<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.6</version>
</dependency>

二、EasyExcel的写操作

1、写入方式一

javabean

/**
 * 这里使用了lombok和validation简化javabean代码
 */
@Data   /* setter/getter */
@NoArgsConstructor  /* 无参构造器 */
@AllArgsConstructor     /* 全参构造器 */
public class Student {
	//使用@ExcelProperty注解来为生成的Excel设置标头
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("年龄")
    private Integer age;
    @ExcelProperty("详情")
    private String details;
    @ExcelProperty("学号")
    private Integer sno;
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty("创建时间")
    private Date createTime;

}

运行代码

    /**
     * 写入方式一
     */
    @Test
    public void test01(){
        //创建文件保存位置,以及文件名
        String filename = "src/main/resources/test01.xlsx";
		//添加模型数据
        List<Student> stus = new ArrayList<Student>();
        stus.add(new Student("zhangsan",11,"hahaha",202101,new Date()));
        stus.add(new Student("zhangsan",12,"saaa",202102,new Date()));
        stus.add(new Student("zhangsan",13,"hahaha",202103,new Date()));
        stus.add(new Student("zhangsan",14,"hahaha",202104,new Date()));
        stus.add(new Student("zhangsan",10,"hahaha",202105,new Date()));
        
        //将list中的数据写入excel中的第一个sheet中,这种方式文件流会自动关闭
        EasyExcel.write(filename,Student.class).sheet("学生信息").doWrite(stus);

    }

运行效果
在这里插入图片描述

2、写入方式二

运行代码

    /**
     * 写入方式二
     */
    @Test
    public void test02(){
        //创建文件保存位置,以及文件名
        String filename = "src/main/resources/test02.xlsx";

        List<Student> stus = new ArrayList<Student>();
        stus.add(new Student("zhangsan",11,"hahaha",202101,new Date()));
        stus.add(new Student("zhangsan",12,"saaa",202102,new Date()));
        stus.add(new Student("zhangsan",13,"hahaha",202103,new Date()));
        stus.add(new Student("zhangsan",14,"hahaha",202104,new Date()));
        stus.add(new Student("zhangsan",10,"hahaha",202105,new Date()));

        //创建Excel写入对象
        ExcelWriter writer = EasyExcel.write(filename,Student.class).build();
        //创建Sheet对象一个sheet对象就是一张sheet工作簿
        WriteSheet writeSheet = EasyExcel.writerSheet("学生信息").build();
        //将工作表写入到Excel中
        writer.write(stus,writeSheet);
        //关闭
        writer.finish();

    }

运行效果
在这里插入图片描述

3、排除属性字段

    /**
     * 排除字段
     */
    @Test
    public void test03(){
        //创建文件保存位置,以及文件名
        String filename = "src/main/resources/test03.xlsx";

        List<Student> stus = new ArrayList<Student>();
        stus.add(new Student("zhangsan",11,"hahaha",202101,new Date()));
        stus.add(new Student("zhangsan",12,"saaa",202102,new Date()));
        stus.add(new Student("zhangsan",13,"hahaha",202103,new Date()));
        stus.add(new Student("zhangsan",14,"hahaha",202104,new Date()));
        stus.add(new Student("zhangsan",10,"hahaha",202105,new Date()));
        //设置排除属性字段
        Set<String> set = new HashSet<String>();
        set.add("details");
        //排除属性字段
        EasyExcel.write(filename,Student.class).excludeColumnFiledNames(set)
                .sheet("用户信息").doWrite(stus);

    }

运行结果
在这里插入图片描述

4、包含属性字段

    /**
     * 排除字段
     */
    @Test
    public void test04(){
        //创建文件保存位置,以及文件名
        String filename = "src/main/resources/test04.xlsx";

        List<Student> stus = new ArrayList<Student>();
        stus.add(new Student("zhangsan",11,"hahaha",202101,new Date()));
        stus.add(new Student("zhangsan",12,"saaa",202102,new Date()));
        stus.add(new Student("zhangsan",13,"hahaha",202103,new Date()));
        stus.add(new Student("zhangsan",14,"hahaha",202104,new Date()));
        stus.add(new Student("zhangsan",10,"hahaha",202105,new Date()));

        //设置包含属性字段
        Set<String> set = new HashSet<String>();
        set.add("name");
        set.add("age");

        //包含属性字段
        EasyExcel.write(filename,Student.class).includeColumnFiledNames(set)
                .sheet("用户信息").doWrite(stus);
    }

运行效果
在这里插入图片描述

5、设置列的顺序

运行写入方式

通过设置@ExcelProperty的index来设置字段所在的列

/**
 * 这里使用了lombok简化javabean代码
 */
@Data   /* setter/getter */
@NoArgsConstructor  /* 无参构造器 */
@AllArgsConstructor     /* 全参构造器 */
public class Student {
    //通过设置index来设置字段所在的列
    @ExcelProperty(value = "姓名",index = 1)
    private String name;
    @ExcelProperty(value = "年龄",index = 2)
    private Integer age;
    @ExcelProperty(value = "详情",index = 4)
    private String details;
    @ExcelProperty(value = "学号",index = 3)
    private Integer sno;
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty(value = "创建时间",index = 5)
    private Date createTime;

}

运行效果
在这里插入图片描述

6、设置复杂头

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {
	//复杂头设置
    @ExcelProperty({"教师汇总","姓名"})
    private String name;
    @ExcelProperty({"教师汇总","年龄"})
    private Integer age;
    @ExcelProperty({"教师汇总","详情"})
    private String details;
    @ExcelProperty({"教师汇总","课程"})
    private String course;
    @ExcelProperty({"教师汇总","日期"})
    @DateTimeFormat("yyyy-MM-dd")
    private Date date;
}

运行代码

    @Test
    public void test06(){
        //创建文件保存位置,以及文件名
        String filename = "src/main/resources/test06.xlsx";

        List<Teacher> teachers = new ArrayList<Teacher>();
        teachers.add(new Teacher("zhaoliu",34,"nihao","yuwen",new Date()));
        teachers.add(new Teacher("zhaoliu",34,"nihao","shuxue",new Date()));
        teachers.add(new Teacher("zhaoliu",24,"nihao","yingyu",new Date()));
        teachers.add(new Teacher("zhaoliu",66,"nihao","yingyue",new Date()));
        teachers.add(new Teacher("zhaoliu",53,"nihao","yuwen",new Date()));
        teachers.add(new Teacher("zhaoliu",54,"nihao","yuwen",new Date()));

        //将list中的数据写入excel中的第一个sheet中,这种方式文件流会自动关闭
        EasyExcel.write(filename,Teacher.class).sheet("老师信息").doWrite(teachers);
    }

运行效果
在这里插入图片描述

7、图片导入

5种方式

@Data
@NoArgsConstructor
public class ImageData {
    private File file;
    private InputStream inputStream;
    /**
     * 如果string类型 必须指定转换器,string默认转换成string
     */
    @ExcelProperty(converter = StringImageConverter.class)
    private String string;
    private byte[] byteArray;
    /**
     * 根据url导出
     */
    private URL url;
}

运行代码

    /**
     * 图片导出
     * 1. 创建excel对应的实体对象 参照{@link ImageData}
     * 2. 直接写即可
     */
    @Test
    public void imageWrite() throws Exception {
        String fileName = "src/main/resources/test07.xlsx";
        // 如果使用流 记得关闭
        InputStream inputStream = null;
        try {
            List<ImageData> list = new ArrayList<ImageData>();
            ImageData imageData = new ImageData();
            list.add(imageData);
            String imagePath = "src/main/resources/test.png";
            // 放入五种类型的图片 实际使用只要选一种即可
            //1、将图片以二进制数组的形式存入对象
            imageData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));
            //2、以文件的形式存入对象
            imageData.setFile(new File(imagePath));
            //3、以字符串的形式存入对象(会通过StringImageConverter将图片转换为字符串)
            imageData.setString(imagePath);
            //4、通过流的方式存入对象
            inputStream = FileUtils.openInputStream(new File(imagePath));
            imageData.setInputStream(inputStream);
            //5、通过URL的方式存入对象
            imageData.setUrl(new URL(
                    "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2853553659,1775735885&fm=26&gp=0.jpg"));
            EasyExcel.write(fileName, ImageData.class).sheet().doWrite(list);
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }

运行效果

在这里插入图片描述

8、设置标题内容列宽

使用以下三个注解来设置

//注解在类或方法上都可
@HeadRowHeight(30) //设置标题高度
@ContentRowHeight(100) //设置内容高度
@ColumnWidth(50) //设置列宽

用7的案例

运行效果(注释在类上)

在这里插入图片描述

9、设置样式

方式一:用注解

使用写入方式一运行

在Studnet类上使用这些注解
类和方法都可以注释

//类和方法都可以注释
//标题样式设置                字体样式                           背景样式 LEMON_CHIFFON(26),
@HeadStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND,fillForegroundColor = 26)
//设置标题字体 大小
@HeadFontStyle(fontHeightInPoints = 40)
//内容样式设置                字体样式                           背景样式 IndexedColors SKY_BLUE(40)
@ContentStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND,fillForegroundColor = 40)
//设置内容字体        大小
@ContentFontStyle(fontHeightInPoints = 20)

运行效果

在这里插入图片描述

方式二

运行方法

    /**
     * 自定义样式
     * <p>1. 创建excel对应的实体对象 参照{@link DemoData}
     * <p>2. 创建一个style策略 并注册
     * <p>3. 直接写即可
     */
    @Test
    public void styleWrite() {
        String fileName = "src/main/resources/test08.xlsx";
        // 头的策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 背景设置为红色
        headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
        //字体默认设置
        WriteFont headWriteFont = new WriteFont();
        //设置头部字体大小
        headWriteFont.setFontHeightInPoints((short)20);
        //通过字体的其他默认设置来设置头部字体
        headWriteCellStyle.setWriteFont(headWriteFont);
        // 内容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        // 背景绿色
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
        WriteFont contentWriteFont = new WriteFont();
        // 字体大小
        contentWriteFont.setFontHeightInPoints((short)20);
        contentWriteCellStyle.setWriteFont(contentWriteFont);
        // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
        HorizontalCellStyleStrategy horizontalCellStyleStrategy =
                new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

        List<Teacher> teachers = new ArrayList<Teacher>();
        teachers.add(new Teacher("zhaoliu",34,"nihao","yuwen",new Date()));
        teachers.add(new Teacher("zhaoliu",34,"nihao","shuxue",new Date()));
        teachers.add(new Teacher("zhaoliu",24,"nihao","yingyu",new Date()));
        teachers.add(new Teacher("zhaoliu",66,"nihao","yingyue",new Date()));
        teachers.add(new Teacher("zhaoliu",53,"nihao","yuwen",new Date()));
        teachers.add(new Teacher("zhaoliu",54,"nihao","yuwen",new Date()));

        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        EasyExcel.write(fileName, Teacher.class).registerWriteHandler(horizontalCellStyleStrategy).sheet("模板")
                .doWrite(teachers);
    }

运行效果
在这里插入图片描述

10、合并单元格

javabean

@Data
@NoArgsConstructor
@AllArgsConstructor
//合并行索引为1-3列索引为1-3的单元格
@OnceAbsoluteMerge(firstRowIndex = 1,lastRowIndex = 3,firstColumnIndex = 1,lastColumnIndex = 3)
public class MergeCell {
    @ExcelProperty("单元格名字")
    @ContentLoopMerge(eachRow = 2) //合并列
    private String cellName;
    @ExcelProperty("长")
    private Integer width;
    @ExcelProperty("宽")
    private Integer heigth;
}

运行代码

    @Test
    public void test09(){
        //创建文件保存位置,以及文件名
        String filename = "src/main/resources/test09.xlsx";

        List<MergeCell> mergeCells = new ArrayList<MergeCell>();
        mergeCells.add(new MergeCell("cell1",17,15));
        mergeCells.add(new MergeCell("cell2",16,16));
        mergeCells.add(new MergeCell("cell3",15,17));
        mergeCells.add(new MergeCell("cell4",14,18));
        mergeCells.add(new MergeCell("cell5",13,19));
        mergeCells.add(new MergeCell("cell6",12,20));

        EasyExcel.write(filename,MergeCell.class).sheet("test01").doWrite(mergeCells);

    }

运行效果

在这里插入图片描述

三、EasyExcel的写操作

1、简单读取操作

运行代码

    @Test
    public void testRead01(){
        String fileName = "src/main/resources/test11.xlsx";
        //实现AnalysisEventListener监听器
        EasyExcel.read(fileName, new AnalysisEventListener<User>() {
            //每读取一行,执行一次
            public void invoke(User user, AnalysisContext analysisContext) {
                System.out.println("读取到的数据:"+user);
            }
            //读取完后运行
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("执行完毕");
            }
        }).sheet("用户表").doRead();
    }

要读取的内容
在这里插入图片描述
运行结果
在这里插入图片描述

2、指定列名和下标

同写入下标指定方式点击既达

3、自定义格式转换

自定义格式转换器

/**
 * 配置自定义转换器实现 Converter接口
 */
public class CustomStringStringConverter implements Converter<String> {
    public Class supportJavaTypeKey() {
        return String.class;
    }
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
    /**
     * 这里读的时候会调用
     */
    public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                    GlobalConfiguration globalConfiguration) {
        return "自定义:" + cellData.getStringValue();
    }
    /**
     * 这里是写的时候会调用 不用管
     */
    public CellData convertToExcelData(String value, ExcelContentProperty contentProperty,
                                       GlobalConfiguration globalConfiguration) {
        return new CellData(value);
    }
}

java对象

@Data
public class ConverterData {
    /**
     * 可以通过converter属性设置自定义转换器。为该属性值前加上”自定义“
     */
    @ExcelProperty(converter = CustomStringStringConverter.class)
    private String string;
    /**
     * 这里用string 去接日期才能格式化。我想接收年月日格式
     */
    @DateTimeFormat("yyyy年MM月dd日")
    private String date;
    /**
     * 我想接收百分比的数字
     */
    @NumberFormat("#.##%")
    private String doubleData;
}

运行方法

    /**
     * 日期、数字或者自定义格式转换
     * <p>
     * 默认读的转换器{@link DefaultConverterLoader#loadDefaultReadConverter()}
     * <p>1. 创建excel对应的实体对象 参照{@link ConverterData}.里面可以使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定义注解
     * <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link ConverterDataListener}
     * <p>3. 直接读即可
     */
    @Test
    public void converterRead() {
        String fileName = "src/main/resources/test12.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet
        EasyExcel.read(fileName, ConverterData.class, new AnalysisEventListener<ConverterData>() {
            public void invoke(ConverterData data, AnalysisContext context) {
                System.out.println("获取数据:"+data);
            }

            public void doAfterAllAnalysed(AnalysisContext context) {
                System.out.println("数据获取完毕");
            }
        })
                // 这里注意 我们也可以registerConverter来指定自定义转换器, 但是这个转换变成全局了, 所有java为string,excel为string的都会用这个转换器。
                // 如果就想单个字段使用请使用@ExcelProperty 指定converter
                // .registerConverter(new CustomStringStringConverter())
                // 读取sheet
                .sheet().doRead();
    }

读取内容
在这里插入图片描述

运行效果
在这里插入图片描述

4、多头行读取

.headRowNumber(2)
运行方法

    @Test
    public void test12(){
        String fileName = "src/main/resources/test06.xlsx";
        EasyExcel.read(fileName, Teacher.class, new AnalysisEventListener<Teacher>() {
            public void invoke(Teacher teacher, AnalysisContext context) {
                System.out.println("获取数据:"+teacher);
            }

            public void doAfterAllAnalysed(AnalysisContext context) {
                System.out.println("数据获取完毕");
            }
        }).sheet("老师信息")
                // 这里可以设置1,因为头就是一行。如果多行头,可以设置其他值。不传入也可以,因为默认会根据DemoData 来解析,他没有指定头,也就是默认1行
                .headRowNumber(2).doRead();
    }

读取内容
在这里插入图片描述
运行效果
在这里插入图片描述

四、模板填充

1、单个填充

javabean

@Data
public class FillData {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("数字")
    private double number;
}

模板
在这里插入图片描述
运行方法

    /**
     * 最简单的填充
     *
     */
    @Test
    public void simpleFill() {
        // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
        // 模板中的变量要与javabean中的一致
        String templateFileName = "src/main/resources/model.xlsx";

        // 方案1 根据对象填充
        String fileName = "src/main/resources/test13.xlsx";
        // 这里 会填充到第一个sheet, 然后文件流会自动关闭
        FillData fillData = new FillData();
        fillData.setName("张三");
        fillData.setNumber(5.2);
        // doFill方法中传入填充数据
        EasyExcel.write(fileName,FillData.class).withTemplate(templateFileName).sheet().doFill(fillData);

        // 方案2 根据Map填充
        fileName = "src/main/resources/test14.xlsx";
        // 这里 会填充到第一个sheet, 然后文件流会自动关闭
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "张三");
        map.put("number", 5.2);
        EasyExcel.write(fileName,FillData.class).withTemplate(templateFileName).sheet().doFill(map);
    }

运行结果
在这里插入图片描述

2、列表填充

运行方法

    /**
     * 填充列表
     *
     * @since 2.1.1
     */
    @Test
    public void listFill() {
        // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
        // 填充list 的时候还要注意 模板中{.} 多了个点 表示list
        String templateFileName = "src/main/resources/model2.xlsx";

        // 方案1 一下子全部放到内存里面 并填充
        String fileName = "src/main/resources/test15.xlsx";

        List<FillData> data = new ArrayList<FillData>();
        data.add(new FillData("zhangsan",11));
        data.add(new FillData("zhangsan",12));
        data.add(new FillData("zhangsan",13));
        data.add(new FillData("zhangsan",14));
        data.add(new FillData("zhangsan",15));
        // 这里 会填充到第一个sheet, 然后文件流会自动关闭
        EasyExcel.write(fileName,FillData.class).withTemplate(templateFileName).sheet().doFill(data);

        // 方案2 分多次 填充 会使用文件缓存(省内存)
        fileName = "src/main/resources/test13.xlsx";
        ExcelWriter excelWriter = EasyExcel.write(fileName,FillData.class).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        excelWriter.fill(data, writeSheet);
        excelWriter.fill(data, writeSheet);
        // 千万别忘记关闭流
        excelWriter.finish();
    }

模板

在这里插入图片描述

运行结果

在这里插入图片描述

3、复杂填充

运行方法

    /**
     * 复杂的填充
     *
     * @since 2.1.1
     */
    @Test
    public void complexFill() {
        // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
        // {} 代表普通变量 {.} 代表是list的变量
        String templateFileName = "src/main/resources/model3.xlsx";

        String fileName = "src/main/resources/test16.xlsx";
        ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();

        List<FillData> data = new ArrayList<FillData>();
        data.add(new FillData("zhangsan",11));
        data.add(new FillData("zhangsan",12));
        data.add(new FillData("zhangsan",13));
        data.add(new FillData("zhangsan",14));
        data.add(new FillData("zhangsan",15));

        // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
        // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
        // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
        // 如果数据量大 list不是最后一行 参照下一个
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        excelWriter.fill(data, fillConfig, writeSheet);
        excelWriter.fill(data, fillConfig, writeSheet);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("date", "2019年10月9日13:28:28");
        map.put("total", 1000);
        excelWriter.fill(map, writeSheet);
        excelWriter.finish();
    }

模板

在这里插入图片描述

运行结果

在这里插入图片描述

4、横向填充

运行方法

    /**
     * 横向的填充
     *
     * @since 2.1.1
     */
    @Test
    public void horizontalFill() {
        // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
        // {} 代表普通变量 {.} 代表是list的变量
        String templateFileName = "src/main/resources/model4.xlsx";

        String fileName = "src/main/resources/test17.xlsx";
        ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        //通过FillConfig配置横向填充
        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();

        List<FillData> data = new ArrayList<FillData>();
        data.add(new FillData("zhangsan",11));
        data.add(new FillData("zhangsan",12));
        data.add(new FillData("zhangsan",13));
        data.add(new FillData("zhangsan",14));
        data.add(new FillData("zhangsan",15));

        excelWriter.fill(data, fillConfig, writeSheet);
        excelWriter.fill(data, fillConfig, writeSheet);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("date", "2019年10月9日13:28:28");
        excelWriter.fill(map, writeSheet);

        // 别忘记关闭流
        excelWriter.finish();
    }

模板

在这里插入图片描述
运行效果

在这里插入图片描述

二、快速入门EasyExcel 一、快速入门–QuickStart 1.1、新建工程、导入依赖 <!-- EasyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency> <!-- lombok 优雅编程 阅读详情

相关推荐

《科研伦理与学术规范》期末考试答案2023

26单选(2 分)某学术杂志的评稿人同时是某高校相关专业的硕士生导师,在评判一个稿件的时候,他发现该作者研究的题目很有价值, 他便一边压下这个稿子,一边将稿子的纲要传给自己门下的硕士生, 指导他们使用这个题目独立写出一篇论文,并帮助他们发表在其他期 刊上。D.要善待实验动物,是指在饲养管理和使用实验动物过程中,要采取有效措施,使实验动物免遭不必要的伤害、饥渴、不适、惊恐、折磨、疾病和疼痛,保证动物能够实现自然行为,受到良好的管理与照料,为其提供清洁、舒适的生活环境。张某在压力之下不得不屈从。

Glenseeds的博客 4万+

easyExcel监听器---导入

Right.W 2658

WSL2离线安装Ubuntu终极指南:绕过Microsoft Store慢速下载(附最新22.04 LTS离线包)

本文提供WSL2离线安装Ubuntu 22.04 LTS的完整指南,帮助开发者绕过Microsoft Store下载慢的问题。通过PowerShell命令配置环境、获取离线安装包并完成安装,同时包含初始配置、资源优化及常见问题解决方案,助您快速搭建高效的Linux开发环境。

c8d9e0f1的博客 900

使用EasyExcel实现数据导入功能 监听器配置 直接用!!!

阿里巴巴的EasyExcel是一种Java语言编写的开源库,用于简化Excel文件的导入和导出操作。在Java中解析Excel,比有名的框架有Apache POI和jxl,但是他们都有个严重的问题就是非常耗内存。相比EasyExcel在处理大型Excel文件时,EasyExcel能够有效地管理内存,避免出现内存溢出等问题,而且也比较简单。

m0_70962382的博客 5144

ISCE2+MintPy环境搭建实战:用Anaconda五分钟搞定InSAR处理全家桶

本文提供了一份详细的ISCE2+MintPy环境安装教程,旨在帮助InSAR处理初学者快速搭建开发环境。通过使用Anaconda创建虚拟环境并配置国内镜像,用户可在五分钟内一键安装ISCE2和MintPy全家桶,有效解决依赖冲突和版本兼容性问题,让用户能专注于数据处理本身。

2y3u4i5o6p的博客 1005

C++中const和指针*的组合问题

今天在复习> 章节7.3的时候想到以前做的一个题,const和指针运算符*的若干种组合的合法性和意义问题,有点混淆,所以写了一个测试代码来验证一下,简单明了,一目了然。如果有什么遗漏的话欢迎指出。 首先是在Ubuntu14.04.1下用gcc 4.8.4编译运行的结果,编译器报错信息都附加在对应语句后面的注释里 /* * Note : Test for the combinations of

theColdOne的专栏 1082

Java实现EasyExcel读取前几行前几列

因为只读前几行前几列,资源占用和读取时长都很短,因此想要直接同步读进行处理,但是EsayExcel同步读的时候,除了自己重写一些类之外,是默认注册了同步读监听器的,因此之前考虑用同步读一直没实现。在当前的项目中,有一个需求是数据集文件的预览操作,既然是数据集,大数据量Excel文件也是不可避免的,几百列几万行数据那都是很正常的,因此需要做一个限定行列的都区方案。......

JavaFeng 7289

单片机:实现MPU6050的卡尔曼滤波算法(附完整源码)

单片机:实现MPU6050的卡尔曼滤波算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 798

深入源码,easyexcel的全面探索

简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存。所以阿里人员对它进行了重写从而诞生了easyexcel,它解决了过于消耗内存问题,也对它进行了封装让使用者使用更加便利。 新手同学,可以先了解下 easyexcel的基本使用《真香!Java 导出 Excel 表格竟变得如此简单优雅》。 接下来我先一一介绍它所有的功能细节、如何使用及部分源码...

vincent 3647

广州吉欧电子科技有限公司安卓开发工程师岗位 - 技术核心、职责详解与面试指南

广州吉欧电子科技有限公司招聘安卓开发工程师,该岗位可接收优秀应届生。岗位职责包括:1)负责安卓应用架构设计与开发,确保稳定性和可扩展性;2)功能模块编码实现与测试;3)性能优化与用户体验提升;4)后端接口对接;5)系统版本适配;6)用户反馈处理迭代;7)特殊要求熟悉RTK高精度定位技术原理及使用。该岗位要求扎实的安卓开发技术、良好的架构设计能力、性能优化经验,以及特定领域的RTK专业知识,是一个技术全面且具有专业特色的开发岗位。

郑伟强dev的专栏 154

手把手教你玩转服务器芯片架构​专栏--​​3.5 实战案例:用SystemC搭建一个多核服务器芯片的NoC模型(含流量分配与延迟仿真)​

通过SystemC搭建多核NoC模型,可深入验证流量分配策略与延迟特性。实际工程中需结合FPGA原型验证(如Xilinx Alveo)进行时序收敛分析,并通过参数化设计适配不同服务器芯片需求。

MHD0815的博客 3047

EasyExcel快速入门

报表导出是实际工作中必须学会的一个东西,我们如何通过Java代码来导出Mysql的数据到我们的Excel报表中?这个时候就要用到我们的EasyExcel了。本文是B站EasyExcel快速入门的总结,可以在2小时内快速入门EasyExcel的使用

LUCIAZZZ的博客 1270

2026 拉勾网:JA4+指纹绕过 + sign逆向 + 动态城市参数,月采集10万+数据实战

2026年拉勾网反爬技术全面升级,采用JA4+ TLS指纹识别、动态sign签名等多维度防护体系。本文提供工业级爬虫解决方案,通过curl_cffi模拟浏览器指纹、逆向sign加密算法、动态生成城市参数三大核心技术,实现高效稳定的数据采集。系统采用分层架构设计,包含任务调度、签名生成、多线程引擎等模块,单月可获取10万+条招聘数据。重点解析了JA4+指纹识别原理、传统方法的局限性,以及通过HMAC-SHA256算法逆向sign参数的完整过程。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2395

EasyExcel快速入门通俗易懂教程

EasyExcel 一、初识EasyExcel 1. Apache POI 先说POI,有过报表导入导出经验的同学,应该听过或者使用。 Apache POI是Apache软件基金会的开源函式库,提供跨平台的Java API实现Microsoft Office格式档案读写。但是存在如下一些问题: 1.1 学习使用成本较高 对POI有过深入了解的才知道原来POI还有SAX模式(Dom解析模式)。但SAX模式相对比较复杂,excel有03和07两种版本,两个版本数据存储方式截然不同,sax解析方式也各不一样。 想

我的名字叫雪冬 1673

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

EasyExcel 快速入门

EasyExcel 是一个基于 Java 的简单、高效的 Excel 处理工具。它由阿里巴巴开源,主要解决了在 Java 应用中处理 Excel 文件时内存溢出的问题。

制定持续可量化的目标,不断坚持。 4860

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

easyExcel快速入门

实现excel的导入导出和下载

记录学习,共同进步 781

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

easyexcel官方文档_easyexcel快速入门

一 前言本篇是EasyExcel快速入门知识,讲解如何读取,写入excel ,并给出了简单web示例;为什么要使用easyexcel;原因是相比于poi,easyexcel更加轻量级,读取写入API方便,并且在工作中占用内存较小;官方描述如下:Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定...

weixin_39611930的博客 4143

easyexcel读取表头_EasyExcel的基本使用和快速入门

一、Excel导入导出的应用场景1、数据导入:减轻录入工作量2、数据导出:统计信息归档3、数据传输:异构系统之间数据传输二、EasyExcel简介2.1 EasyExcel特点Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。E...

weixin_34523442的博客 8937

easyexcel 设置header_easyexcel快速入门

一 前言本篇是EasyExcel快速入门知识,讲解如何读取,写入excel ,并给出了简单web示例;为什么要使用easyexcel;原因是相比于poi,easyexcel更加轻量级,读取写入API方便,并且在工作中占用内存较小;官方描述如下:Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定...

weixin_39800990的博客 1748

easyexcel快速入门

一 前言 本篇是EasyExcel快速入门知识,讲解如何读取,写入excel ,并给出了简单web示例;为什么要使用easyexcel;原因是相比于poi,easyexcel更加轻量级,读取写入API方便,并且在工作中占用内存较小; 官方描述如下: Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可...

知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;) 1161

EasyExcel的快速入门指南

EasyExcel是一个Java的Excel操作工具,可以方便地进行Excel文件的读写操作。以上代码将读取名为"input.xlsx"的Excel文件的第一个Sheet中的数据,并通过监听器进行处理。以上是EasyExcel的快速入门指南。通过EasyExcel,您可以方便地进行Excel文件的读写操作。以上代码将创建一个名为"output.xlsx"的Excel文件,并在Sheet1中写入数据。替换为您想要使用的EasyExcel版本。

m0_51691167的博客 400

EasyExcel的快速入门(附图文)

Apache POI是Apache软件基金会的开源函式库,提供跨平台的Java API实现 Mcrosoft office 格式档案读写。

AFQOOO的博客 433
上一篇: Linux之shell编程基本用法和语法笔记
下一篇: Redis持久化之RDB笔记
magicproblem
博客等级 码龄7年 22粉丝 59原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值