您的位置:

EasyExcelPOI——实现Excel读写的全能利器

一、简介

EasyExcelPOI是一款基于Apache POI封装的简单易用的Java Excel读写工具。通过使用EasyExcelPOI,我们可以实现Excel文件的导入导出、数据的读取和处理等功能,可以为Java程序员提供更方便快捷的Excel处理方式。它不但可以读写Excel文件,而且可以读写CSV文件。

二、优点

EasyExcelPOI是什么?为什么要使用它?EasyExcelPOI有以下几个优点:

1、简单易用:EasyExcelPOI采用POI进行封装,使得读写Excel变得非常简单易用。通过注解方式来映射Java对象和Excel的行,列,单元格等,规范了读写Excel文件的操作方式。

2、高效性:EasyExcelPOI采用POI进行封装,采用了大数据量的异步写Excel的方式,使得性能得到了大幅提升。再加上一些自带的优化,可以实现秒级读取百万数据并直接换成Java对象。

3、兼容性:EasyExcelPOI可以读写Excel2003和Excel2007及以上版本的文件,同时也支持读写CSV文件。可以满足不同业务需要。

4、灵活性:EasyExcelPOI支持对Excel的全部操作,包括读写、样式、合并、图片等功能。可以通过灵活的定制,实现不同业务需求。

三、应用场景

EasyExcelPOI适用于各种Excel文件的读写场景,比如:

1、数据导入导出:可以将CSV或者Excel文件导入数据库中,也可以把数据库中的数据导出成Excel或CSV格式文件。

2、批量数据处理:可以通过Excel来处理批量数据,增删改查等复杂操作变得简单。

3、数据分析:可以将复杂的数据进行转换、计算、筛选等操作,生成简单的数据分析报告。

四、使用教程

1、 pom.xml添加依赖

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.10</version>
    </dependency>
</dependencies>

2、Java对象转Excel

使用EasyExcelPOI把Java对象转换成Excel,只需要如下几个步骤:

1、创建一个Java对象,对象必须包含@com.alibaba.excel.annotation.ExcelProperty注解;

2、构建一个写出对象并指定要写出的文件,如下所示:

// 指定文件输出路径
String filename = "C:/test/student.xlsx";

// 构建写出对象
try (OutputStream out = new FileOutputStream(filename)) {
    ExcelWriter writer = EasyExcel.write(out).build();
    // 将多个sheet写入同一个文件中
    WriteSheet sheet1 = EasyExcel.writerSheet(0, "学生名单").build();
    WriteSheet sheet2 = EasyExcel.writerSheet(1, "成绩单").build();
    writer.write(data1, sheet1);
    writer.write(data2, sheet2);
    writer.finish();
    out.flush();
}

3、把Java对象写入Excel文件。

List list = new ArrayList<>();
... // 创建List
    list
try (OutputStream out = new FileOutputStream("C:/test/student.xlsx")) {
    ExcelWriter writer = EasyExcel.write(out, Student.class).build(); // 设置Java对象的类
    WriteSheet sheet1 = EasyExcel.writerSheet(0, "学生名单").build(); // 设置sheet名称和位置
    writer.write(list, sheet1); // 把List写入Excel
    writer.finish(); // 关闭
    out.flush();
}

   
  

3、Excel转Java对象

使用EasyExcelPOI把Excel转换成Java对象,只需要如下几个步骤:

1、创建一个Java对象,对象必须包含@com.alibaba.excel.annotation.ExcelProperty注解;

2、构建一个读入对象并指定要读入的文件,如下所示:

// 指定文件路径
String filename = "C:/test/student.xlsx";
try (InputStream inputStream = new FileInputStream(filename)) {
    ExcelReader reader = EasyExcel.read(inputStream).build(); // 创建读取对象
    ReadSheet sheet1 = EasyExcel.readSheet(0).head(Student.class).build(); // 表示第一个sheet,映射到Student类
    reader.read(sheet1);
    List list = sheet1.getHeadRowNumber() == 0 ? sheet1.getList() : sheet1.getDatas(); // 从sheet1里获取数据
    ... // 处理数据
}

  

3、把Excel文件读取到Java对象中。

public class Student {
    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private Integer age;

    @ExcelProperty("生日")
    private Date birthday;

    getters and setters ...
}

try (InputStream inputStream = new FileInputStream("C:/test/student.xlsx")) {
    ExcelReader reader = EasyExcel.read(inputStream, Student.class, new StudentExcelListener()).build();
    ReadSheet sheet1 = EasyExcel.readSheet(0).build();
    reader.read(sheet1);
}

4、Excel文件操作

EasyExcelPOI提供了一些常用的文件操作。

1、合并单元格,如下所示:

CellStyle cellStyle = ... // 设置单元格样式
Sheet sheet = ... // 获取sheet
sheet.addMergedRegion(new CellRangeAddress(rowStartIndex, rowEndIndex, columnStartIndex, columnEndIndex));
Cell cell = sheet.getRow(0).getCell(0);
cell.setCellValue("测试数据");
cell.setCellStyle(cellStyle);

2、设置单元格样式,如下所示:

Workbook workbook = ... // 获取workbook
Sheet sheet = ... // 获取sheet
CellStyle cellStyle = workbook.createCellStyle();
... // 配置单元格样式
Font font = workbook.createFont();
... // 配置字体
cellStyle.setFont(font); // 把字体设置到样式中
cell.setCellStyle(cellStyle); // 把样式设置到单元格中

3、插入图片,如下所示:

Workbook workbook = ... // 获取workbook
Sheet sheet = ... // 获取sheet
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
... // 生成图片
Drawing drawing = sheet.createDrawingPatriarch();
ByteArrayInputStream bais = new ByteArrayInputStream(byteArrayOut.toByteArray());
byteArrayOut.close();
byteArrayOut.flush();
int index;
index = workbook.addPicture(bais, Workbook.PICTURE_TYPE_PNG);
bais.close();
bais = new ByteArrayInputStream(data);
Picture picture = drawing.createPicture(new XSSFClientAnchor(), index);
picture.resize();
bais.close();

五、总结

EasyExcelPOI是一款基于Apache POI封装的Java Excel读写工具,其具有简单易用、高效性、兼容性和灵活性等优点。在实际应用场景中,我们可以使用EasyExcelPOI实现任何Excel导入导出、数据读取和处理等功能。它的出现能够为Java程序员提供更方便快捷的Excel处理方式,也是Excel读写的全能利器,希望大家能够在实际开发中灵活应用。