easyexcel填充excel

导读:Excel文件填充是许多企业和个人日常工作中必不可少的一项任务。对于一次性需要生成大量Excel文件的场景,手动填充显然是非常浪费时间且容易出错的。这时,使用Java EasyExcel这个工具可以帮助我们快速、准确地填充Excel文件,提高工作效率与准确度。本篇文章将会介绍Java EasyExcel的使用方法、函数的详细说明以及具体实现的步骤等内容,以帮助大家更好地运用Excel文件填充技能。

1. EasyExcel简介

EasyExcel 是一个基于POI封装的 Java 读写Excel的开源项目,性能较快,支持Java对象到Excel文件的写操作,提供多种读取 Excel 的方式,使用简单便捷,具有快速读写、低内存占用的特点。

1.1 EasyExcel 的主要特点

1. 易于使用:提供了大量的API,能够高效地读取和输出Excel文件。

easyexcel填充excel

2. 快速读写:采用内存映射技术,避免OOM问题,并且使用低级别的POI API,具有高性能读写Excel的特点。

3. POI封装:采用POI作为Excel操作底层,封装POI对Excel文件的底层操作,使得使用者无需了解过多POI的API。

4. 对象映射:可直接将Java对象输出到Excel文件中,简单易用,提高代码效率。

5. 数据监听:可监听Excel文件的数据,并通过回调函数进行处理,适合大数据量或者复杂数据结构的读取。

6. 支持多种文件格式:除了 Excel 格式,还能够支持 CSV、XML、ODS 等格式的读写操作。

1.2 导入EasyExcel依赖包

首先,我们需要在项目中导入 EasyExcel 的依赖包,在 Maven 项目中导入以下代码:

```

com.alibaba

easyexcel

2.2.7

```

2. Java EasyExcel API

2.1 EasyExcel 核心API

EasyExcel的核心API是EasyExcelFactory类,使用它可以很方便地实现Excel文件的读写,主要提供以下几个方法:

read():读取 Excel 文件中的数据。

write():向 Excel 文件中写入数据。

readAll():读取 Excel 文件所有 Sheet 中的数据。

writeAll():向 Excel 文件中所有 Sheet 写入数据。

接下来,我们将会对这些方法进行具体的讲解。

2.2 Excel 读取操作

EasyExcel 提供了大量的注解,可以方便地配置 Excel 中的数据与Java对象的映射关系。下面我们详细介绍 Excel 读取操作的API:

2.2.1 Excel读取单个Sheet(默认读第一个Sheet)

如下是读取单个 Sheet 的示例代码:

```

@ExcelSheet

public class DemoData {

@ExcelProperty("字符串标题")

private String string;

@ExcelProperty("日期标题")

private Date date;

@ExcelProperty("数字标题")

private Double doubleData;

}

public class DemoDataListener extends AnalysisEventListener {

public void invoke(DemoData data, AnalysisContext context) { }

public void doAfterAllAnalysed(AnalysisContext context) { }

}

EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();

```

其中,DemoData 类用来存储读取后的 Excel 数据,DemoDataListener 类用来处理读取过程中对数据的逻辑操作。示例代码中,使用 @ExcelSheet 注解标记 DemoData 类,指明该类对应 Excel 中的一个 Sheet。在构造读取器时,使用 EasyExcel.read() 方法传入 fileNameDemoData.classDemoDataListener,完成 Sheet 内容的读取操作。其中,sheet() 方法默认选用第 1 个 Sheet,如需指定 Sheet 可使用 sheet(sheetNo)

2.2.2 Excel读取多个Sheet

如下是读取多个 Sheet 的示例代码:

```

EasyExcel.read(fileName, DemoData.class, new DemoDataListener())

.sheet(0)

.sheet(1)

.doRead();

```

上述代码中,sheet() 方法用于指定需要读取的 Sheet,参数 sheetNo 表示 Sheet 的编号,从 0 开始。多个 Sheet 可使用多个 sheet() 方法进行指定,然后通过 doRead() 方法进行读取操作。

2.2.3 使用注解定义Excel文件数据类型

EasyExcel 支持使用注解直接将Excel文件中的数据读入到Java对象中,使用起来非常简洁易懂。下面是一个示例代码:

```

@Data

public class UploadData {

@ExcelProperty("姓名")

private String name;

@ExcelProperty("年龄")

private Integer age;

@ExcelProperty("邮箱")

private String email;

@ExcelIgnore

private String ignore;

}

@ColumnWidth(20)

@HeadStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND, fillForegroundColor = 11)

@ContentStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND, fillForegroundColor = 22, wrapped = true)

public class UploadDataListener extends AnalysisEventListener {

private List list = new ArrayList<>();

public void invoke(UploadData data, AnalysisContext context) {

list.add(data);

}

public void doAfterAllAnalysed(AnalysisContext context) {

// 业务逻辑处理

}

}

EasyExcel.read(file.getInputStream(),UploadData.class,new UploadDataListener()).sheet().doRead();

```

上述代码中,@ExcelProperty 注解用于声明Java类的属性与Excel中每列的关系。

2.3 Excel 写入操作

Excel 写入操作采用了类似于监听器(Listener)的设计模式,结合 ExcelWriteContext 对象控制 Excel 写入的各个环节,具有较高的灵活度,写出的 Excel 文件格式、样式与数据处理逻辑也相对容易掌控。

2.3.1 Excel 写入单个Sheet

EasyExcel提供了write()writeList() 以及 writeMap() 函数用于完成 Excel 中内容的写入。以下是一个写入单个 Sheet 的示例代码:

```

@Data

public class DemoData {

@ExcelProperty("字符串标题")

private String string;

@ExcelProperty("日期标题")

private Date date;

@ExcelProperty("数字标题")

private Double doubleData;

}

public static void main(String[] args) throws IOException {

String fileName = "test.xlsx";

EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());

}

private static List data() {

List list = new LinkedList<>();

for (int i = 0; i < 5; i++) {

DemoData item = new DemoData();

item.setString("字符串" + i);

item.setDate(new Date());

item.setDoubleData(Double.valueOf(i));

list.add(item);

}

return list;

}

```

其中,通过 EasyExcel.write() 方法构造一个写入器 ExcelWriter。接下来,通过 ExcelWriter.sheet() 方法指定需要写入的 Sheet 名称。通过 ExcelWriter.doWrite() 方法实现 Excel 数据(List 集合)的写入操作。

2.3.2 Excel 写入多个Sheet

EasyExcel 同时也能够支持将多个数据写入不同的 Sheet 中。示例代码如下:

```

@Data

public class DemoData {

@ExcelProperty("字符串标题")

private String string;

@ExcelProperty("日期标题")

private Date date;

@ExcelProperty("数字标题")

private Double doubleData;

}

public static void main(String[] args) throws IOException {

String fileName = "test.xlsx";

// 写法1

ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();

WriteSheet sheet1 = EasyExcel.writerSheet(0,"模板1").build();

List data1 = data();

excelWriter.write(data1, sheet1);

WriteSheet sheet2 = EasyExcel.writerSheet(1,"模板2").build();

List data2 = data();

excelWriter.write(data2, sheet2);

excelWriter.finish();

// 写法2

EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new FreezeAndFilterTable()).sheet("模板1").doWrite(data());

EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new FreezeAndFilterTable()).sheet("模板2").doWrite(data());

}

private static List data() {

List list = new LinkedList<>();

for (int i = 0; i < 5; i++) {

DemoData item = new DemoData();

item.setString("字符串" + i);

item.setDate(new Date());

item.setDoubleData(Double.valueOf(i));

list.add(item);

}

return list;

}

```

上述代码中,使用 ExcelWriter 建立写入器,然后通过sheet重载方法指定需要写入的Sheet。通过 ExcelWriter.doWrite() 方法实现 Excel 数据的写入操作。

2.3.3 Excel 导出时的样式处理

除了数据之外,EasyExcel 还能对 Excel 文件进行样式处理。如下代码示例展示了如何为 Excel 写入过程设置不同的样式:

```

public static void main(String[] args) throws IOException {

String fileName = "test.xlsx";

// 定义样式配置项

List styles = new ArrayList<>();

styles.add(new WriteCellStyle().setHeadCellStyle(new WriteCellStyle().setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()).setFillPatternType(FillPatternType.SOLID_FOREGROUND))

.setContentCellStyle(new WriteCellStyle().setDataFormat((short) BuiltinFormats.getBuiltinFormat("0.00"))));

styles.add(new WriteCellData().setRowIndex(1).setCellStyle(new WriteCellStyle().setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()).setFillPatternType(FillPatternType.SOLID_FOREGROUND)));

EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new FreezeAndFilterTable()).sheet("模板").doWrite(data()).setWriteCellStyle(styles);

}

```

通过 EasyExcel.setWriteCellStyle() 方法设置单元格样式,其中 WriteCellStyle、WriteCellData 是样式配置项,分别代表了样式与单元格位置。上述代码中,第一个样式设置了表头填充和数据格式(保留两位小数),第二个样式设置了第 2 行的填充样式(这个数据只有一行,第 2 行就是表头行)。

3. Excel文件读写实现步骤

上文介绍了 EasyExcel 的核心API,下面来系统地介绍一下 Excel 文件的读写实现步骤:

检查 Excel 文件是否存在,如不存在则进行错误反馈。

构造读取器或写入器。

设置 Excel 样式处理事项、全局信息。

通过 Sheet 的方式进行读写操作,采用“一次读取,多次处理”的方法,增强代码的可读性与稳定性。

数据操作完成之后,关闭读取器或写入器。

4. 总结

本文简单介绍了 EasyExcel 的使用方法,包括 EasyExcel 的特点、核心API、Excel 文件读写实现步骤等内容。EasyExcel的API设计精巧,具有优秀的性能与可扩展性。在实际开发过程中,使用 EasyExcel能够提高开发效率,避免对底层原理的操作。同时,通过代码演示,读者也能够更加便捷地了解 EasyExcel的操作模式。通过反复练习、沉淀,相信 EasyExcel将能够为你的工作提供巨大的帮助。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。站悠网站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

上一篇:easyexcel多线程导出excel

下一篇:each word

相关内容

  • 在WPS的excel三维饼图是怎么做的
  • 在WPS的Excel中,三维饼图是一种非常直观的图表展示方式,可以有效地表达数据的比例关系。无论是在商务报告、学术研究还是日常数据分析中,三维饼图都能为用户提供...
  • 2024-11-22 16:45:32

    1

  • 在excel表格中怎样根据出生年月快速得出年龄
  • 在现代社会中,准确计算年龄在很多场合都非常重要,尤其是在企业管理、教育系统及医疗健康等领域。而在Excel表格这类办公软件中,如何根据出生年月快速得出年龄,可以...
  • 2024-11-22 16:44:52

    1

  • 在Excel表格中怎样快速删除空格字符
  • 在日常工作中,Excel作为一款强大的数据处理工具,被广泛应用于各类数据管理和分析活动中。然而,在数据处理的过程中,空格字符的存在往往会给我们的工作带来麻烦。空...
  • 2024-11-22 16:44:17

    1

  • 在excel表格中限定输入本月日期的三种方法
  • 在日常工作中,Excel被广泛使用于数据处理与管理中,而日期的输入尤为重要。尤其是当我们需要限定用户输入本月日期时,使用一些技巧可以提高数据的准确性和一致性。下...
  • 2024-11-22 16:40:11

    1

  • 在excel表格中设置能展开合并的功能
  • 在现代办公中,Excel作为一款高级电子表格软件,越来越受到人们的青睐。它的功能强大,使得数据整理和分析变得更加高效。本文将详细介绍如何在Excel表格中设置能...
  • 2024-11-22 16:39:55

    1

  • 在excel表格里的一堆数据里如何自动刷选
  • 在当今的数据处理过程中,Excel作为一款强大的电子表格软件,广泛应用于各类数据分析和管理任务中。在处理大量数据时,简单地查看和分析这些数据可能变得十分困难。为...
  • 2024-11-22 16:38:59

    1