Java 中EasyExcel的使用方式

yizhihongxing

下面是Java中EasyExcel的使用方式的完整攻略:

1. 简介

EasyExcel是一款基于Java开发的、功能强大的Excel读写解决方案,使用起来方便快捷,支持读写Excel、CSV、HTML、JSON等文件格式,并且具有高性能,内存消耗低等优点,是目前比较流行的Excel读写工具之一。

2. 如何使用

2.1 引入依赖

在项目中引入EasyExcel的相关依赖,可以通过在pom.xml文件中添加如下依赖来引入:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.6</version>
</dependency>

2.2 Excel读操作

2.2.1 简单读取

首先需要定义实现Excel数据读取的listener类,例如:

public class DemoDataListener extends AnalysisEventListener<DemoData> {

    private List<DemoData> list = new ArrayList<>();

    public List<DemoData> getList() {
        return list;
    }

    public void setList(List<DemoData> list) {
        this.list = list;
    }

    @Override
    public void invoke(DemoData data, AnalysisContext context) {
        list.add(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {

    }

}

这里的DemoData是一个自定义的java类,用于存储Excel中每一行的数据:

@Data
public class DemoData {

    @ExcelProperty(index = 0)
    private String string;

    @ExcelProperty(index = 1)
    private Date date;

    @ExcelProperty(index = 2)
    private Double doubleData;

}

假设要从文件中读取Excel数据,可以通过如下代码读取:

// 构建读取对象
DemoDataListener listener = new DemoDataListener();
ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.XLSX, null, listener);

// 读取Excel数据
excelReader.read();

// 获取读取到的数据
List<DemoData> list = listener.getList();

然后就可以通过list获取到Excel中读取到的所有数据了。

2.2.2 多sheet读取

假设Excel中有多个sheet,需要逐个读取,可以通过如下代码实现:

// 创建Excel读取工具对象
ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.XLSX, null, new DemoDataListener());

// 获取所有sheet的名称
List<Sheet> sheets = excelReader.getSheets();

// 逐个读取sheet数据
for (Sheet sheet : sheets) {
    sheetName = sheet.getSheetName();

    System.out.println("正在读取: " + sheetName);

    // 构建读取对象
    DemoDataListener listener = new DemoDataListener();
    AnalysisContext analysisContext = new AnalysisContext(sheet.getSheetName(), 0);
    excelReader.read(sheet, analysisContext, listener);

    // 获取读取到的数据
    List<DemoData> list = listener.getList();
}

2.3 Excel写操作

2.3.1 简单写入

通过EasyExcel,可以方便地将数据写入到Excel文件中。假设有一个List,可以通过如下代码实现写入:

// 创建输出流
OutputStream outputStream = new FileOutputStream("demo.xlsx");

// 创建写入工具对象
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX);

// 构造ExcelSheet
ExcelSheet sheet = new ExcelSheet();
sheet.setSheetName("sheet1");
sheet.setHead(DemoData.class);
sheet.setDataList(list);

// 将数据写入sheet
excelWriter.write(sheet);

// 关闭流
excelWriter.finish();
outputStream.close();

2.3.2 多sheet写入

如果需要将数据写入到多个sheet中,可以通过如下代码实现:

// 创建输出流
OutputStream outputStream = new FileOutputStream("demo.xlsx");

// 创建写入工具对象
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX);

// 构造ExcelSheet列表
List<ExcelSheet> sheets = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    ExcelSheet excelSheet = new ExcelSheet();
    excelSheet.setSheetName("sheet" + i);
    excelSheet.setHead(DemoData.class);
    excelSheet.setDataList(list);
    sheets.add(excelSheet);
}

// 将数据写入每个sheet
for (ExcelSheet sheet : sheets) {
    excelWriter.write(sheet);
}

// 关闭流
excelWriter.finish();
outputStream.close();

3. 示范代码

附上读取和写入各个文件格式的示例代码:

// 读取csv文件
InputStream inputStream = new FileInputStream("D:/demo.csv");
CsvReader csvReader = new CsvReader(inputStream, Charset.forName("UTF-8"));
csvReader.readHeaders();
while (csvReader.readRecord()) {
    String cellValue = csvReader.get(0);
}

// 写入csv文件
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.CSV);
ExcelSheet sheet = new ExcelSheet();
sheet.setSheetName("Sheet1");
List<String> data = Arrays.asList("hello,"world", "easy", "excel");
sheet.setDataList(Arrays.asList(data));
excelWriter.write(sheet);
excelWriter.finish();
outputStream.close();

// 读取html文件
InputStream inputStream = new URL("http://www.baidu.com").openStream();
ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.HTML);
excelReader.read();

// 写入html文件
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.HTML);
ExcelSheet sheet = new ExcelSheet();
sheet.setSheetName("Sheet1");
List<String> data = Arrays.asList("hello,"world", "easy", "excel");
sheet.setDataList(Arrays.asList(data));
excelWriter.write(sheet);
excelWriter.finish();
outputStream.close();

// 读取json文件
InputStream inputStream = new FileInputStream("D:/demo.json");
ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.JSON);
excelReader.read();

// 写入json文件
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.JSON);
ExcelSheet sheet = new ExcelSheet();
sheet.setSheetName("Sheet1");
List<String> data = Arrays.asList("hello,"world", "easy", "excel");
sheet.setDataList(Arrays.asList(data));
excelWriter.write(sheet);
excelWriter.finish();
outputStream.close();

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 中EasyExcel的使用方式 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • idea快速搭建springboot项目的操作方法

    下面是“idea快速搭建springboot项目的操作方法”的完整攻略: 环境准备 首先,我们需要安装JDK和IntelliJ IDEA。 安装JDK:请前往Oracle官网下载 JDK 安装包,并按照官方向导安装。 安装IntelliJ IDEA:请前往JetBrains官网下载 IntelliJ IDEA 社区版,并按照官方向导安装。 创建项目 打开In…

    Java 2023年5月31日
    00
  • spring boot实现软删除的示例代码

    下面是Spring Boot实现软删除的完整攻略: 1. 理解软删除 首先需要了解软删除的概念和作用。软删除指的是不是真正删除数据,而是在数据库中新增一个状态字段,用于标记该数据是否被删除。这样可以保留数据完整性,同时又不会真正删除数据,方便数据恢复。 2. 实现示例1 我们以一个简单的用户信息管理为例进行讲解。首先创建一个用户实体类,包含id、用户名、密码…

    Java 2023年5月19日
    00
  • jQuery通过控制节点实现仅在前台通过get方法完成参数传递

    下面就是jQuery通过控制节点实现仅在前台通过get方法完成参数传递的攻略。 什么是jQuery通过控制节点实现仅在前台通过get方法完成参数传递 在前端页面中,我们有时需要把数据传递到后端处理,而jQuery通过控制节点实现仅在前台通过get方法完成参数传递就是一种实现这一需求的方法。 简单来说,就是通过控制页面上的节点元素来获取数据,并将数据通过get…

    Java 2023年6月15日
    00
  • JavaWeb 中 Filter过滤器

    Filter过滤器 每博一文案 师傅说:人生无坦途,累是必须的背负,看多了,人情人暖,走遍了离合聚散,有时会 在心里对自己说,我想,我是真的累了,小时候有读不完的书,长大后有赚不尽的力。 白天在外要奋斗打拼,把心事都藏起来,笑脸相迎,做一个合格的员工,晚上回家要照顾家人。 把家务都打理的井井有条,做一个称职的伴侣,习惯了所有事情,自己扛,习惯了所有委屈自己消…

    Java 2023年5月9日
    00
  • Spring @Bean vs @Service注解区别

    下面是关于Spring中@Bean和@Service注解的详细讲解。 1. @Bean注解 1.1 概述 @Bean注解是用来注册一个Java Bean对象的,它是放在方法上的注解。当Spring的容器启动时,会去扫描所有带有这个注解的方法并执行它,最终返回的对象会被放到Spring的容器中。 1.2 示例说明 假设有一个用户服务的实现类UserServic…

    Java 2023年5月31日
    00
  • 教你用java完美封装微信模板消息的发送动态

    下面我将为你详细讲解“教你用Java完美封装微信模板消息的发送动态”的完整攻略。 目录 准备工作 设计实现方案 发送动态示例 获取access_token示例 准备工作 在开始使用Java封装微信模板消息发送的过程中,我们需要准备以下工具: 微信公众号或小程序的AppID和AppSecret。 在进行微信模板消息发送之前,我们需要在公众号或者小程序中先添加模…

    Java 2023年5月23日
    00
  • Java中常用修饰符的使用方法汇总

    Java中常用修饰符的使用方法汇总 在Java中,修饰符是一种关键字,用于修饰类、变量、方法等结构的访问权限、范围等特征。本文将会详细讲解Java中常用修饰符的使用方法,帮助读者更好地理解和掌握Java编程。 访问修饰符 Java中访问修饰符包括public、protected、default和private四种,它们分别控制着变量、方法和类的访问权限。下面…

    Java 2023年5月26日
    00
  • J2EE验证码图片如何生成和点击刷新验证码

    生成验证码图片是常见的防止机器恶意攻击的安全策略之一,J2EE技术栈中也针对这个问题提供了解决方案。下面,我将为大家详细讲解如何生成验证码图片并实现点击刷新验证码的功能。 一、生成验证码图片 生成验证码图片一般可以借助第三方库或自己编写代码实现。下面我们来讲解一种使用第三方库生成验证码图片的方法:使用Kaptcha。 1.1 引入Kaptcha依赖 在Mav…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部