EasyExcel导入导出Excel数据

2024-06-22 14:52

本文主要是介绍EasyExcel导入导出Excel数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EasyExcel 是阿里巴巴开源的一个用于读写Excel文件的Java库。它提供了简单的API,可以方便地操作Excel文件,特别适合处理大数据量的Excel文件。

EasyExcel的主要特点:

  • 高性能:设计用于高效处理大数据量。
  • 内存管理:采用流模式读写Excel文件,避免内存溢出。
  • 注解支持:通过注解将Java对象映射到Excel行和列。
  • 灵活性:支持简单和复杂的Excel文件结构。

基本用法:

将EasyExcel添加到项目中,如果你使用Maven,可以在pom.xml中添加依赖

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

Excel导入导出SDK封装(ocean-easyexcel):

  1. 定义Excel工具类EasyExcelUtil,封装Excel导入导出功能
package com.angel.ocean.excel;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.handler.WriteHandler;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;/*** Excel工具类*/
@Slf4j
public class EasyExcelUtil {private EasyExcelUtil() {}/*** 导出excel** @param response  HttpServletResponse* @param fileName  文件名称* @param sheetName 单元薄名称* @param list      导出数据* @param classType 导出对象* @param <T> 结果*/public static <T> void writeExcel(HttpServletResponse response, String fileName, String sheetName, List<T> list, Class<T> classType, WriteHandler... writeHandler) {// 此处ContentType不要变,前端会根据此类型手动创建Blob对象进行下载response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.addHeader("charset", "utf-8");String encodeName = null;try {encodeName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());response.setHeader("Content-disposition", "attachment;filename=" + encodeName);ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream(), classType);for (WriteHandler handler : writeHandler) {writerBuilder.registerWriteHandler(handler);}writerBuilder.sheet(sheetName).doWrite(list);} catch (UnsupportedEncodingException e) {log.error("UnsupportedEncodingException", e);} catch (IOException e) {log.error("IOException", e);}}/*** 导出excel模板** @param response  HttpServletResponse* @param fileName  文件名称* @param sheetName 单元薄名称* @param head      表头* @param writeHandler 自定义处理器*/public static void writeExcelTemplate(HttpServletResponse response, String fileName, String sheetName, List<List<String>> head, WriteHandler... writeHandler) {response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.addHeader("charset", "utf-8");String encodeName = null;try {encodeName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());response.setHeader("Content-disposition", "attachment;filename=" + encodeName);ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream()).inMemory(true);for (WriteHandler handler : writeHandler) {writerBuilder.registerWriteHandler(handler);}writerBuilder.sheet(sheetName).head(head);} catch (UnsupportedEncodingException e) {log.error("UnsupportedEncodingException", e);} catch (IOException e) {log.error("IOException", e);}}/*** 数据解析处理* @param excelImportDataHandler* @param inputStream* @param pojoClass* @param sheetNo* @param headRowNumber* @param <T>*/public static <T> void readExcel(ExcelImportDataHandler excelImportDataHandler, InputStream inputStream, Class<T> pojoClass, Integer sheetNo, Integer headRowNumber) {// 读的excelEasyExcelImportListener easyExcelImportListener = new EasyExcelImportListener(excelImportDataHandler);// 先读取第一个sheet页ExcelReader excelReader = EasyExcel.read(inputStream, pojoClass, easyExcelImportListener).build();ReadSheet readSheet = EasyExcel.readSheet(sheetNo).headRowNumber(headRowNumber).build();excelReader.read(readSheet);// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的excelReader.finish();}/*** 根据文件地址获取输入流*/public static InputStream getInputStream(String fileUrl) {InputStream inputStream = null;try {HttpURLConnection conn = (HttpURLConnection) new URL(fileUrl).openConnection();conn.setDoInput(true);conn.connect();inputStream = conn.getInputStream();} catch (IOException e) {log.error("IOException", e);}return inputStream;}
}
  1. 定义Excel数据导入监听EasyExcelImportListener(继承AnalysisEventListener)
package com.angel.ocean.excel;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;@Slf4j
@SuppressWarnings({"all"})
public class EasyExcelImportListener extends AnalysisEventListener<Object> {private ExcelImportDataHandler excelImportDataHandler;private List<Object> data = new ArrayList<>();public EasyExcelImportListener(ExcelImportDataHandler excelImportDataHandler) {this.excelImportDataHandler = excelImportDataHandler;}@Overridepublic void doAfterAllAnalysed(AnalysisContext arg) {excelImportDataHandler.handler(data);}@Overridepublic void invoke(Object object, AnalysisContext context) {data.add(object);if(data.size() > 10) {// 根据自己的业务去处理excelImportDataHandler.handler(data);data = new ArrayList<>();}}
}
  1. 定义Excel数据处理抽象ExcelImportDataHandler,用于处理导入的数据
package com.angel.ocean.excel;import java.util.List;public interface ExcelImportDataHandler<T> {void handler(List<T> data);
}

实例

1. Excel 导入实例
2. Excel 导出实例

这篇关于EasyExcel导入导出Excel数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084601

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一