一、简介
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文件。
Listlist = 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); Listlist = 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读写的全能利器,希望大家能够在实际开发中灵活应用。