Java 中EasyExcel的使用方式

下面是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日

相关文章

  • jsp 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)

    首先,让我们来理解一下 JSP 对 request.getSession(false) 方法的理解以及可能存在的漏洞。 在 JSP 中,每个请求都会有一个 HttpServletRequest 对象,我们可以利用它来获取 Session 对象。通常,我们使用 request.getSession() 来获取 Session 对象,如果 Session 对象不…

    Java 2023年6月15日
    00
  • java实现日历(某年的日历,某月的日历)用户完全自定义

    实现Java日历需要用到以下几个方面的知识: 日期和时间类:Java中有java.util.Date和java.util.Calendar类,但这些类已经被Java 8中的全新日期和时间API(Java.time)所取代,建议使用新API。 控制台输出:Java中有System.out.println()方法可以将内容输出到控制台。 用户输入:Java中有S…

    Java 2023年5月20日
    00
  • 剑指Offer之Java算法习题精讲N叉树的遍历及数组与字符串

    剑指Offer之Java算法习题精讲N叉树的遍历及数组与字符串 前言 N叉树是一种特殊的树结构,其中每个节点可以包含零个或多个子节点。在这篇文章中,我们将讨论如何遍历N叉树,并提供一些示例。 N叉树的遍历 前序遍历 前序遍历的过程是先访问根节点,然后递归地访问每个子树。 在N叉树中,前序遍历的代码实现如下: public void preOrder(Node…

    Java 2023年5月19日
    00
  • @JsonFormat 和 @DateTimeFormat 时间格式化注解(场景示例代码)

    @JsonFormat和@DateTimeFormat是两个常用的时间格式化注解。 @JsonFormat注解 @JsonFormat是一个Jackson库提供的注解,用于对Date类型的属性进行格式化,将Date类型格式化为指定的格式的字符串,或者将String类型的值反序列化为Date类型。 使用@JsonFormat注解可以将Date类型的属性格式化为…

    Java 2023年6月1日
    00
  • 浅谈java对象的比较

    浅谈Java对象的比较 在Java中,对象的比较可以分为两种:==运算符和equals()方法比较。 == 运算符 == 运算符比较的是两个对象在内存中的引用地址是否相同,如果两个对象的引用地址相同,那么返回true,否则返回false。在实际应用中,== 运算符主要用于判断两个对象是否是同一个对象。 下面是一个示例,我们创建两个Person对象,然后用 =…

    Java 2023年5月26日
    00
  • Intellij IDEA 2017新特性之Spring Boot相关特征介绍

    IntelliJ IDEA 2017是一款功能强大的Java集成开发环境,提供了许多有用的功能和工具,特别是在Spring Boot开发方面。以下是IntelliJ IDEA 2017中Spring Boot相关特性的介绍: 1. Spring Boot Initializr IntelliJ IDEA 2017提供了Spring Boot Initiali…

    Java 2023年5月14日
    00
  • Spring Boot用户注册验证的实现全过程记录

    Spring Boot用户注册验证的实现全过程记录 在Spring Boot中实现用户注册验证可以帮助我们确保只有合法的用户才能够使用我们的服务,让我们的应用更加安全可靠。本攻略将介绍如何使用Spring Boot实现完整的用户注册及验证功能。 1. 创建Spring Boot项目并添加相关依赖 首先,需要创建一个Spring Boot项目,并在pom.xm…

    Java 2023年6月3日
    00
  • 一小时迅速入门Mybatis之实体类别名与多参数 动态SQL

    接下来我将详细讲解一小时迅速入门Mybatis之实体类别名与多参数 动态SQL的完整攻略。 1. 实体类别名 在Mybatis中,可以通过定义实体类别名来简化配置文件的编写和参数的传递。实体类别名可以定义为别名或默认别名。默认别名是一个类名(不含包名),别名可以自定义。另外,需要在配置文件中使用typeAliases节点对别名进行配置。 1.1 别名配置 别…

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