当前位置: 首页 > ds >正文

Excel表的导入与导出

Excel表的导入与导出

  1. 根据excel表来建立所需的数据库表格
        <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.10.3</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.24</version></dependency>
  1. 导入easyexcel依赖项
    阿里巴巴的 EasyExcel 库提供了一种高效、简单的方式来处理Excel文件。EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百兆的Excel。项目地址如下https://easyexcel.opensource.alibaba.com/。

  2. 构建需要的实体类

  3. 在项目中添加easyexcel工具类
    该工具类是网上通用化的方法,适用于任意文件,任意对象实体

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import jakarta.servlet.http.HttpServletResponse;import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;/*** EasyExcel工具类** @author CWW* @date 2024/12/18 16:46*/
public class EasyExcelUtil {private static final String UTF_8 = "UTF-8";/*** 读取文件数据,并返回一个包含指定类型数据的列表。** @param inputStream 文件对象输入流* @param clazz       数据对象的类型* @param <T>         泛型类型,表示数据对象的类型* @return 包含解析后数据对象的列表*/public static <T> List<T> readMultipartFile(InputStream inputStream, Class<T> clazz) {// 用于存储解析后的数据对象final List<T> dataList = new ArrayList<>();EasyExcel.read(inputStream, clazz, new AnalysisEventListener<T>() {@Overridepublic void invoke(T data, AnalysisContext analysisContext) {// 每一条数据解析都会调用此方法// 将解析后的数据对象添加到 dataList中dataList.add(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {// 读取完成后可以进行一些操作}}).sheet().doRead(); // 读取 Excel 文件中的第一个工作表// 返回解析后数据对象的列表return dataList;}/*** 导出 Excel文件** @param response  HTTP 响应对象* @param fileName  文件名,用于在客户端保存文件时显示* @param sheetName 工作表名,Excel 文件中的工作表名称* @param list      要导出的数据列表* @param clazz     实体类的类对象,用于定义 Excel 文件的结构* @param <T>       数据列表的元素类型*/public static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> list, Class<T> clazz) {try {// 设置响应内容类型为 Excel 文件response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");// 设置响应字符编码response.setCharacterEncoding(UTF_8);// 使用 URLEncoder 编码文件名,防止中文乱码// replaceAll("\\+", "%20") 用于将空格编码为 %20,而不是 + 号String fileNameEncode = URLEncoder.encode(fileName, UTF_8).replaceAll("\\+", "%20");// 设置响应头,告诉浏览器这是一个附件response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEncode + ".xlsx");// 使用 EasyExcel 写入数据到响应的输出流// clazz 参数用于指定 Excel 文件的结构类// sheetName 参数用于指定 Excel 文件中的工作表名称EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(list);} catch (Exception e) {e.printStackTrace();}}
}
  1. 添加导入导出接口
    以下代码并不完整,需要继续填充service层和dao层。
import com.example.demo.common.EasyExcelUtil;
import com.example.demo.entity.Book;
import com.example.demo.service.BookService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.util.List;/*** 文件导入导出控制层* @author CWW* @date 2024/12/18 11:42*/
@Validated
@RestController
public class BookController {@Resourceprivate BookService bookService;/*** 文件导入** @param file excel文件* @return 执行结果*/@PostMapping("/upload")public Boolean readFile1(MultipartFile file) throws Exception {// 定义一个接收表格内容的集合List<Book> list;// 读取文件内容try {list = EasyExcelUtil.readMultipartFile(file.getInputStream(), Book.class);} catch (Exception e) {throw new Exception(e.getMessage());}//将book数据逐个插入到数据库中return true;}/*** 导出excel文件** @param response 响应体*/@PostMapping("/download")public void downFile1(HttpServletResponse response) {// 获取用户信息列表// 导出文件EasyExcelUtil.export(response, "书籍列表", "书籍清单", , Book.class);}}
http://www.xdnf.cn/news/5741.html

相关文章:

  • RAGFlow 初步尝试 (01)
  • 基于HTTP头部字段的SQL注入:SQLi-labs第17-20关
  • OpenCV4.8 开发实战系列专栏之 49 二值图像分析 -轮廓外接矩形
  • 我用Deepseek + 亮数据爬虫神器 1小时做出輿情分析器
  • 一文了解JavaScript对象
  • Kotlin与Ktor构建Android后端API
  • RWA开发全解析:技术架构、合规路径与未来趋势
  • Matlab 汽车制动纵向动力学模型和PID控制
  • Webpack中Compiler详解以及自定义loader和plugin详解
  • 用python清除PDF文件中的水印(Adobe Acrobat 无法删除)
  • 机架式服务器是什么?机架式/塔式/刀片式三大服务器类型区别与选型全解析
  • vue3+flask+sqlite前后端项目实战
  • 谱聚类,大模型
  • uniapp 复刻 keep 跑步运动轨迹 (获取当前经纬度信息)
  • Java实现MCP server,配合DeepSeek和达梦数据库,实现基于企业数据库的智能问答
  • 在Windows 境下,将Redis和Nginx注册为服务。
  • uniapp使用npm下载
  • 《数字人 :生成之旅》
  • 第二十五节:轮廓检测-轮廓特征 (面积、周长、边界框等)
  • 前端面试宝典---webpack面试题
  • 【Linux】在Arm服务器源码编译onnxruntime-gpu的whl
  • Spring Boot异步任务失效的8大原因及解决方案
  • 四、STM32 HAL库API完全指南:从功能分类到实战示例
  • Hadoop区别
  • Dagster Pipes系列-1:调用外部Python脚本
  • 【CF】Day57——Codeforces Round 955 (Div. 2, with prizes from NEAR!) BCD
  • 利用散点图探索宇航员特征与太空任务之间的关系
  • BUUCTF 大流量分析(三) 1
  • 开源链动2+1模式AI智能名片S2B2C商城小程序赋能新微商服务能力升级研究
  • 主从架构:技术原理与实现