今天科比离去,今天肺炎病毒持续肆虐。。。

意识到生命的脆弱,今天我继续前行,比以往更加坚定和紧迫,这辈子不活好自己就算白来一趟。

1.项目介绍

最近帮朋友做了一个小工具,就是实现:上传一个excel文件,将数据导入mysql表中,再调用存储过程进行转换计算,最后再将处理结果导出成excel。中间用到的一些知识点记录下来和朋友分享。

2.效果图

3.pom整合

  1. <!--解析excel-->
  2. <dependency>
  3. <groupId>org.apache.poi</groupId>
  4. <artifactId>poi</artifactId>
  5. <version>3.16</version>
  6. </dependency>
  7. <!--处理2007 excel-->
  8. <dependency>
  9. <groupId>org.apache.poi</groupId>
  10. <artifactId>poi-ooxml</artifactId>
  11. <version>3.16</version>
  12. </dependency>

4.工具类

  1. package com.laoxu.test.helloweb.util;
  2. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  3. import org.apache.poi.ss.usermodel.*;
  4. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.web.multipart.MultipartFile;
  8. import java.io.FileNotFoundException;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.util.ArrayList;
  12. /**
  13. * @Description:
  14. * @Author laoxu
  15. * @Date 2020/1/24 16:00
  16. **/
  17. public class ExcelUtil {
  18. private static final Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
  19. /**
  20. * 获取并解析excel文件,返回一个二维集合
  21. * @param file 上传的文件
  22. * @return 二维集合(第一重集合为行,第二重集合为列,每一行包含该行的列集合,列集合包含该行的全部单元格的值)
  23. */
  24. public static ArrayList<ArrayList<String>> analysis(MultipartFile file) {
  25. ArrayList<ArrayList<String>> result = new ArrayList<>();
  26. //获取文件名称
  27. String fileName = file.getOriginalFilename();
  28. System.out.println(fileName);
  29. try {
  30. //获取输入流
  31. InputStream in = file.getInputStream();
  32. //判断excel版本
  33. Workbook workbook = null;
  34. if (judegExcelEdition(fileName)) {
  35. workbook = new XSSFWorkbook(in);
  36. } else {
  37. workbook = new HSSFWorkbook(in);
  38. }
  39. //获取第一张工作表
  40. Sheet sheet = workbook.getSheetAt(0);
  41. //从第二行开始获取
  42. Row row=null;
  43. for (int i=1; i<sheet.getPhysicalNumberOfRows();i++) {
  44. row = sheet.getRow(i);
  45. //循环获取每一列
  46. ArrayList<String> list = new ArrayList<>();
  47. Cell cell = null;
  48. for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
  49. // logger.info(i+":"+j);
  50. cell = row.getCell(j);
  51. if(cell==null){
  52. cell = row.createCell(j);
  53. }
  54. cell.setCellType(CellType.STRING);
  55. list.add(cell.getStringCellValue());
  56. }
  57. //将装有每一列的集合装入大集合
  58. result.add(list);
  59. //关闭资源
  60. workbook.close();
  61. }
  62. } catch (FileNotFoundException e) {
  63. e.printStackTrace();
  64. System.out.println("===================未找到文件======================");
  65. } catch (IOException e) {
  66. e.printStackTrace();
  67. System.out.println("===================上传失败======================");
  68. }
  69. return result;
  70. }
  71. /**
  72. * 判断上传的excel文件版本(xls为2003,xlsx为2017)
  73. * @param fileName 文件路径
  74. * @return excel2007及以上版本返回true,excel2007以下版本返回false
  75. */
  76. private static boolean judegExcelEdition(String fileName){
  77. if (fileName.matches("^.+\\.(?i)(xls)$")){
  78. return false;
  79. }else {
  80. return true;
  81. }
  82. }
  83. }

5.controller

  1. package com.laoxu.test.helloweb.controller;
  2. import com.laoxu.test.helloweb.entity.WorkDt;
  3. import com.laoxu.test.helloweb.service.WorkDtService;
  4. import com.laoxu.test.helloweb.util.ExcelUtil;
  5. import org.apache.poi.hssf.usermodel.HSSFRow;
  6. import org.apache.poi.hssf.usermodel.HSSFSheet;
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  8. import org.apache.poi.ss.usermodel.CellType;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.GetMapping;
  12. import org.springframework.web.bind.annotation.RequestBody;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.ResponseBody;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import javax.servlet.http.HttpServletResponse;
  17. import java.util.*;
  18. /**
  19. * @Description: excel上传
  20. * @Author laoxu
  21. * @Date 2020/1/24 16:25
  22. **/
  23. @Controller
  24. @RequestMapping("/api/excel/")
  25. public class ExcelUploadController {
  26. @Autowired
  27. WorkDtService workDtService;
  28. //接受文件上传
  29. @RequestMapping("/upload")
  30. @ResponseBody
  31. public Map<String,Object> uploadFile(MultipartFile file, HttpServletResponse response) {
  32. Map<String,Object> map = new HashMap<>(16);
  33. //解析excel文件
  34. List<ArrayList<String>> row = ExcelUtil.analysis(file);
  35. if(row.size()>0){
  36. //1.清空表
  37. workDtService.removeAll();
  38. //2.插入数据
  39. WorkDt entity = null;
  40. int size=0;
  41. for (int i = 0;i<row.size();i++){
  42. entity = new WorkDt();
  43. List<String> cell = row.get(i);
  44. size = cell.size();
  45. // 不足32个的 补全
  46. for (int j = size; j < 32; j++) {
  47. cell.add("");
  48. }
  49. entity.setSeqno(Integer.valueOf(cell.get(0)));
  50. entity.setD1(cell.get(1));
  51. entity.setD2(cell.get(2));
  52. entity.setD3(cell.get(3));
  53. entity.setD4(cell.get(4));
  54. entity.setD5(cell.get(5));
  55. entity.setD6(cell.get(6));
  56. entity.setD7(cell.get(7));
  57. entity.setD8(cell.get(8));
  58. ...
  59. workDtService.add(entity);
  60. /* for (int j = 0;j<cell.size();j++){
  61. System.out.print(cell.get(j)+" ");
  62. }
  63. System.out.println();*/
  64. }
  65. }
  66. //3.调用存储过程
  67. Map<String,String> param = new HashMap<>();
  68. param.put("year","2019");
  69. param.put("month","12");
  70. workDtService.updateWorkDt(param);
  71. Map<String,Object> result = new HashMap<>();
  72. result.put("code",0);
  73. result.put("msg","");
  74. return result;
  75. }
  76. /**
  77. * 导出
  78. * @param response
  79. * @throws Exception
  80. */
  81. @GetMapping("/export")
  82. public void export(HttpServletResponse response) throws Exception{
  83. // 创建工作簿
  84. HSSFWorkbook workbook = new HSSFWorkbook();
  85. // 创建sheet
  86. HSSFSheet sheet = workbook.createSheet("sheet1");
  87. // String id = UUID.randomUUID().toString();
  88. String fileName = "计算结果.xls";// 设置要导出的文件的名字
  89. // 获取数据集合
  90. List<WorkDt> list = workDtService.getAll();
  91. // 在表中存放查询到的数据放入对应的列
  92. HSSFRow row = null;
  93. WorkDt entity=null;
  94. for (int i = 0; i < list.size(); i++) {
  95. entity = list.get(i);
  96. row = sheet.createRow(i);
  97. row.createCell(0).setCellValue(entity.getSeqno());
  98. row.createCell(1,CellType.STRING).setCellValue(entity.getD1());
  99. row.createCell(2,CellType.STRING).setCellValue(entity.getH1());
  100. row.createCell(3).setCellValue(entity.getD2());
  101. row.createCell(4).setCellValue(entity.getH2());
  102. row.createCell(5).setCellValue(entity.getD3());
  103. row.createCell(6).setCellValue(entity.getH3());
  104. row.createCell(7,CellType.STRING).setCellValue(entity.getD4());
  105. row.createCell(8,CellType.STRING).setCellValue(entity.getH4());
  106. row.createCell(9).setCellValue(entity.getD5());
  107. row.createCell(10).setCellValue(entity.getH5());
  108. row.createCell(11,CellType.STRING).setCellValue(entity.getD6());
  109. row.createCell(12,CellType.STRING).setCellValue(entity.getH6());
  110. ...
  111. }
  112. response.setContentType("application/octet-stream");
  113. response.setHeader("Content-disposition",
  114. "attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
  115. response.flushBuffer();
  116. workbook.write(response.getOutputStream());
  117. }
  118. }

spring boot整合poi实现excel文件导入导出实战的更多相关文章

  1. spring boot 使用 POI 读取Excel文件

    内容简介 本文主要介绍使用POI进行Excel文件的相关操作,涉及读取文件,获取sheet表格,对单元格内容进行读写操作,以及合并单元格的操作. Excel文件目录 Excel模板文件存了resour ...

  2. Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

    Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java   版权声明:本 ...

  3. NodeJs之EXCEL文件导入导出MongoDB数据库数据

    NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...

  4. poi实现excel的导入导出功能

    Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...

  5. Excel文件导入导出(基于Nodejs、exceljs)

    Excel导入.导出是大多数项目的管理后台必备功能.几年来使用过多个该功能的实现包,最近一次开发该功能,突然发现一个人气极高(3000+)的包,这里记录一下使用方法. 大凡厉害的技术的文档咋一看都想字 ...

  6. C# excel文件导入导出

    欢迎关注微信公众号 C#编程大全 这里有更多入门级实例帮你快速成长 在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获! 环境:wi ...

  7. spring boot 整合 poi 导出excel

    一. 第一种方式 1.首先从中央仓库中导入架包Poi3.14以及Poi-ooxml3.14. <dependency> <groupId>org.apache.poi</ ...

  8. SSM中使用POI实现excel的导入导出

    环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...

  9. Excel文件导入导出

    /**     * 导入Excel文件数据     *      * @param file 将要导入的Excel文件     * @param fileCheckKeyWord 用于判断导入文件是否 ...

  10. postman 测试Excel文件导入导出功能

    1.导入的测试方法 选择form-data,key值填写方法对应的参数,选择File,Value处上传文件即可. 2. 导出的测试方法 在导出文件的时候,响应结果是乱码,然后在测试的时候选择下载,下载 ...

随机推荐

  1. mongo环境搭建

    安装 mongoDB mongo下载 添加 MONGOROOT/bin 到环境变量 PATH MONGOROOT是mongo安装目录 启动 mongo 服务启动程序 MONGOROOT/bin/mon ...

  2. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.26)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  3. Net Core中使用EF Core连接Mysql数据库

    Entity Framework Core的前身是微软提供并主推的ORM框架,简称EF,其底层是对ADO.NET的封装.EF支持SQLServer.MYSQL.Oracle.Sqlite等所有主流数据 ...

  4. [转帖]JDK8使用G1 垃圾回收器能解决大问题吗?

    https://zhuanlan.zhihu.com/p/458098236 G1 垃圾回收器真的不行吗? 本文想突出两个问题: 解决问题的思路:从最原始的角度去思考,问题的本身是因为缓存数据导致的G ...

  5. [转帖]oracle 11.2.0.4 rac集群等待事件enq: TM - contention

    近期,一金融客户oracle 11.2.0.4 rac集群delete不当导致等待事件enq: TM - contention严重引起大范围会话堆积,记录的相关分析工作如下. 1.登录集群任意节点,查 ...

  6. [粘贴]TiFlash

    TiFlash 是 TiDB HTAP 形态的关键组件,它是 TiKV 的列存扩展,在提供了良好的隔离性的同时,也兼顾了强一致性.列存副本通过 Raft Learner 协议异步复制,但是在读取的时候 ...

  7. [转帖]Linux下strace调试系统应用参数总结(附实例操作讲解)

    文章目录 一.简介 二.常用参数详解 三.实例详解 3.1 跟踪具体进程 3.2 监控具体程序执行过程 四.其他相关知识链接 一.简介 strace命令是一个集诊断.调试.统计与一体的Linux 用户 ...

  8. [转帖]总结:记一次K8S容器OOM案例

    一.背景 最近遇到个现象,hubble-api-open组件过段时间会内容占满,从而被K8S强制重启. 让我困惑的是,已经设置了-XX:MaxRAMPercentage=75.0,我觉得留有了一定的空 ...

  9. 基于javaPoet的缓存key优化实践

    一. 背景 在一次系统opsreview中,发现了一些服务配置了@Cacheable注解.@cacheable 来源于spring cache框架中,作用是使用aop的方式将数据库中的热数据缓存在re ...

  10. vscode搜索框不见了如何显示