ToB企服应用市场:ToB评测及商务社交产业平台

标题: java-Excel导入导出数据-方法 [打印本页]

作者: 拉不拉稀肚拉稀    时间: 2024-5-13 02:39
标题: java-Excel导入导出数据-方法
一、Excel导入导出的应用场景

1、数据导入

减轻录入工作量
2、数据导出

统计信息归档
3、数据传输

异构体系之间数据传输
二、EasyExcel简介

Java剖析、天生Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严峻的问题就是非常的耗内存,poi有一套SAX模式的API可以肯定水平的解决一些内存溢出的问题,但POI照旧有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存斲丧依然很大。
easyexcel重写了poi对07版Excel的剖析,一个3M的excel用POI sax剖析依然必要100M左右内存,改用easyexcel可以低落到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让利用者更加简单方便
1、网站

2、EasyExcel特点

四、在 spring-boot 应用

1、引入 pom.xml 依赖
  1. <dependency>
  2.     <groupId>com.alibaba</groupId>
  3.     <artifactId>easyexcel</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.apache.xmlbeans</groupId>
  7.     <artifactId>xmlbeans</artifactId>
  8. </dependency>
  9. <dependency>
  10.     <groupId>cn.afterturn</groupId>
  11.     <artifactId>easypoi-base</artifactId>
  12. </dependency>
  13. <dependency>
  14.     <groupId>cn.afterturn</groupId>
  15.     <artifactId>easypoi-annotation</artifactId>
  16. </dependency>
复制代码
2、建立 ExcelUtils 公共方法
  1. @Slf4j
  2. public class ExcelUtils {
  3.     /**
  4.      * 表格导出
  5.      *
  6.      * @param dataList  数据列表
  7.      * @param sheetName sheet页
  8.      * @param fileName  文件名
  9.      * @param tClass    dataList 类型
  10.      * @param response
  11.      * @param <T>
  12.      */
  13.     public static <T> void excelExport(List<T> dataList, String sheetName, String fileName, Class<T> tClass, HttpServletResponse response) {
  14.         try {
  15.             response.setContentType("application/vnd.ms-excel");
  16.             String contentDisposition = "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8.toString());
  17.             response.setHeader("Content-Disposition", contentDisposition);
  18.             response.setHeader("fileName", URLEncoder.encode(fileName, "UTF-8"));
  19.             response.setHeader("Access-Control-Expose-Headers", "Content-Disposition,fileName");
  20.             // 使用 EasyExcel 构造 ExcelWriter
  21.             final ExcelWriter writer = EasyExcelFactory.write(response.getOutputStream(), tClass).autoCloseStream(Boolean.FALSE).build();
  22.             // 使用 EasyExcel 构造 WriteSheet
  23.             final WriteSheet sheet = EasyExcelFactory.writerSheet(sheetName).build();
  24.             writer.write(dataList, sheet);
  25.             writer.finish();
  26.         } catch (Exception e) {
  27.             log.error("excelExport error", e);
  28.             response.setHeader("content-Type", "application/json; charset=utf-8");
  29.             response.setCharacterEncoding("utf-8");
  30.             try {
  31.                 response.getWriter().println(JSONUtil.toJsonStr(Result.ofErrorT(ResultCodeEnum.SYSTEM_EXECUTION_ERROR.getCode(), ResultCodeEnum.SYSTEM_EXECUTION_ERROR.getMsg())));
  32.             } catch (Exception ex) {
  33.                 log.error("response.getWriter() error", ex);
  34.             }
  35.         }
  36.     }
  37.     /**
  38.      * @param file     文件数据
  39.      * @param zClass   接收文件数据类
  40.      * @param headRows 文件数据从哪一行开始
  41.      * @return
  42.      */
  43.     public static <T> List<T> excelCopyEntities(MultipartFile file, Class<?> zClass, int headRows) throws IOException {
  44.         List<T> list = new ArrayList<>();
  45.         try {
  46.             //配置第几行开始读取数据
  47.             ImportParams params = new ImportParams();
  48.             params.setHeadRows(headRows);
  49.             list = ExcelImportUtil.importExcel(file.getInputStream(), zClass, params);
  50.         } catch (Exception e) {
  51.             e.printStackTrace();
  52.         } finally {
  53.             IOUtils.closeQuietly(file.getInputStream());
  54.         }
  55.         return list;
  56.     }
  57. }
复制代码
3、建立 导入导出 字段实体类

注:@ExcelProperty(value="", index="")

4、编写导入的伪代码

注:此导入不能导入过大的数据量(最好不要超过 mybatis-plus 的接受范围:5000,超过的话,必要在编写别的的读取excel方法,进行分批次导入)

5、编写导出的伪代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4