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

相关内容

  • Excel表格实用教程之设置序列
  • 在日常办公中,Excel表格的使用已经变得愈发普遍。其中,设置序列是一项非常实用的功能,可以帮助用户快速生成各种类型的数值、日期和文本序列。本文将对此进行详细说...
  • 2025-01-22 14:05:43

    1

  • excel表格怎样筛选内容
  • 在现代社会中,数据的处理与分析变得越发重要,而 Excel 作为一种普遍使用的电子表格软件,因其强大的功能而受到大家的欢迎。通过 Excel 表格,我们可以轻松...
  • 2025-01-22 14:05:21

    1

  • Excel表格怎么改变单元格的大小
  • 在使用Excel进行数据处理和分析时,往往需要调整单元格的大小,以使表格更加美观、易读。修改单元格的大小不仅可以帮助我们更清晰地查看数据,还能提高工作效率。接下...
  • 2025-01-22 14:04:59

    1

  • Excel表格怎么用sumif函数求和
  • 在日常工作和学习中,Excel表格已经成为我们不可或缺的工具。在处理大量数据时,求和功能尤为重要,而Excel的SUMIF函数则可以帮助我们进行条件求和。本文将...
  • 2025-01-22 14:04:37

    1

  • excel表格怎么把表格外的网格纹去掉
  • 在使用Excel进行数据处理和分析时,表格的外观往往对最终结果的呈现有着至关重要的影响。有很多用户希望能将那些在单元格外的网格纹去掉,以达到更加美观的效果。本文...
  • 2025-01-22 14:04:18

    1

  • excel表格怎样整列或者整行求和
  • Excel表格是现代办公中不可或缺的工具,尤其是在处理大量数据时。在进行数据分析时,正确地进行求和操作是非常重要的。本文将详细讲解如何整列或者整行地进行求和,帮...
  • 2025-01-22 14:03:56

    1