使用hutool库,对excel进行一些导出、导入操作_hutool excel-程序员宅基地

技术标签: excel  java  servlet  

所用到的各种类,依赖的话百度一下吧,最后再给上全部代码

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.domain.MagBackAmountInfo;
import com.domain.ReturnResult;
import com.example.service.impl.MagBackAmountInfoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

导出数据为excel的接口代码

    @GetMapping("/testExport")
 public void test(HttpServletRequest request, HttpServletResponse response){
    
     int pageStart = Integer.parseInt(request.getParameter("Pagenumber"));
     int pageSize = Integer.parseInt(request.getParameter("number"));
     /** 这里写你自己获取数据的方法*/
        List<MagBackAmountInfo> magBackAmountInfos = backAmountInfoService.selectByPrimarybyid(null);

        ExcelWriter writer = ExcelUtil.getWriter(true);
        /** 这里的作用是将你的字段与excel展示名称做匹配 */
     Map<String,String> map = new HashMap<>();
     map.put("backAmountId","VIN");
     map.put("makeInvocId","ICCID");
     map.put("customerName","客户名称");
     map.put("vehiclesName","车系名称");
     map.put("vehicleModel","车型名称");
     map.put("vehicleConf","配置名称");
     map.put("customerType","客户类型");
     map.put("activedTime","实销通过日期");
     map.put("realStatus","实名状态");
     writer.setHeaderAlias(map);
     /** 这里的作用时,写出之后不展示你的字段名,只展示你设置的别名,客户类型,实销通过日期。这些 */
     writer.setOnlyAlias(true);
     writer.write(magBackAmountInfos,true);
     response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
     response.setHeader("Content-Disposition","attachment;filename=RealnameRechargeBlack.xlsx");
     ServletOutputStream out= null;
     try {
    
         out = response.getOutputStream();
         writer.flush(out, true);
         // 关闭writer,释放内存
         writer.close();
         //此处记得关闭输出Servlet流
         IoUtil.close(out);
     } catch (IOException e) {
    
         e.printStackTrace();
     }
 }

导入时提供模板的接口代码

  @ResponseBody
    @RequestMapping(value = "/moban", method = RequestMethod.GET)
    public void moban(HttpServletRequest request, HttpServletResponse response){
    

        ExcelWriter writer = ExcelUtil.getWriter(true);
        List<String> row = CollUtil.newArrayList("backAmountId", "makeInvocId", "customerName", "vehiclesName","vehicleModel","vehicleConf","customerType","activedTime","realStatus");
        List<String> secRow = CollUtil.newArrayList("VIN", "ICCID", "客户名称", "车系名称","车型名称","配置名称","客户类型","实销通过日期-(yyyy-MM-dd HH:mm:ss)","实名状态");
        writer.writeHeadRow(row);
        writer.writeRow(secRow);
        /** 这里说是隐藏,但是其实就是将高度置为0,有点鸡肋 */
        writer.getSheet().getRow(0).setZeroHeight(true);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setHeader("Content-Disposition","attachment;filename=RealnameRechargeBlack.xlsx");
        ServletOutputStream out= null;
        try {
    
            out = response.getOutputStream();
            writer.flush(out, true);
            // 关闭writer,释放内存
            writer.close();
            //此处记得关闭输出Servlet流
            IoUtil.close(out);
        } catch (IOException e) {
    
            e.printStackTrace();
        }
    }

导入接口代码

    //导入excel
    @PostMapping("/import")
    public ReturnResult importExcel(@RequestParam("file") MultipartFile file) throws IOException {
    
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
        if (file==null|| file.isEmpty()){
    
            return ReturnResult.failed(HttpStatus.BAD_REQUEST.value(), "上传文件为空,请重新上传");
        }
        else if (!suffix.equals("xls")&&!suffix.equals("xlsx")){
    
            return ReturnResult.failed(HttpStatus.BAD_REQUEST.value(), "文件格式错误,请上传excel文件");
        }
        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        /** 因为模板中有两行为提示信息,所以这儿设置从0,2之后读取 */
        List<MagBackAmountInfo> blackDtos = reader.read(0, 2, MagBackAmountInfo.class);
        if (blackDtos.size() == 0) {
    
            return ReturnResult.failed(HttpStatus.BAD_REQUEST.value(), "文件数据为空,请重新上传");
        } else {
    
            /** 可以直接批量插入,也可以在service层做一些关键值的判断 */
             backAmountInfoService.batchInsert(blackDtos);
          return   ReturnResult.ok();
        }
    }

完整class代码

package com.example.demo;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.domain.MagBackAmountInfo;
import com.domain.ReturnResult;
import com.example.service.impl.MagBackAmountInfoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
//允许跨域访问
@CrossOrigin
@RequestMapping("/member")
public class ExcelController {
    

    @Autowired
    MagBackAmountInfoServiceImpl backAmountInfoService;

    @GetMapping("/testExport")
 public void test(HttpServletRequest request, HttpServletResponse response){
    
     int pageStart = Integer.parseInt(request.getParameter("Pagenumber"));
     int pageSize = Integer.parseInt(request.getParameter("number"));
     /** 这里写你自己获取数据的方法*/
        List<MagBackAmountInfo> magBackAmountInfos = backAmountInfoService.selectByPrimarybyid(null);

        ExcelWriter writer = ExcelUtil.getWriter(true);
        /** 这里的作用是将你的字段与excel展示名称做匹配 */
     Map<String,String> map = new HashMap<>();
     map.put("backAmountId","VIN");
     map.put("makeInvocId","ICCID");
     map.put("customerName","客户名称");
     map.put("vehiclesName","车系名称");
     map.put("vehicleModel","车型名称");
     map.put("vehicleConf","配置名称");
     map.put("customerType","客户类型");
     map.put("activedTime","实销通过日期");
     map.put("realStatus","实名状态");
     writer.setHeaderAlias(map);
     /** 这里的作用时,写出之后不展示你的字段名,只展示你设置的别名,客户类型,实销通过日期。这些 */
     writer.setOnlyAlias(true);
     writer.write(magBackAmountInfos,true);
     response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
     response.setHeader("Content-Disposition","attachment;filename=RealnameRechargeBlack.xlsx");
     ServletOutputStream out= null;
     try {
    
         out = response.getOutputStream();
         writer.flush(out, true);
         // 关闭writer,释放内存
         writer.close();
         //此处记得关闭输出Servlet流
         IoUtil.close(out);
     } catch (IOException e) {
    
         e.printStackTrace();
     }
 }


    @ResponseBody
    @RequestMapping(value = "/moban", method = RequestMethod.GET)
    public void moban(HttpServletRequest request, HttpServletResponse response){
    

        ExcelWriter writer = ExcelUtil.getWriter(true);
        List<String> row = CollUtil.newArrayList("backAmountId", "makeInvocId", "customerName", "vehiclesName","vehicleModel","vehicleConf","customerType","activedTime","realStatus");
        List<String> secRow = CollUtil.newArrayList("VIN", "ICCID", "客户名称", "车系名称","车型名称","配置名称","客户类型","实销通过日期-(yyyy-MM-dd HH:mm:ss)","实名状态");
        writer.writeHeadRow(row);
        writer.writeRow(secRow);
        /** 这里说是隐藏,但是其实就是将高度置为0,有点鸡肋 */
        writer.getSheet().getRow(0).setZeroHeight(true);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setHeader("Content-Disposition","attachment;filename=RealnameRechargeBlack.xlsx");
        ServletOutputStream out= null;
        try {
    
            out = response.getOutputStream();
            writer.flush(out, true);
            // 关闭writer,释放内存
            writer.close();
            //此处记得关闭输出Servlet流
            IoUtil.close(out);
        } catch (IOException e) {
    
            e.printStackTrace();
        }
    }


    //导入excel
    @PostMapping("/import")
    public ReturnResult importExcel(@RequestParam("file") MultipartFile file) throws IOException {
    
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
        if (file==null|| file.isEmpty()){
    
            return ReturnResult.failed(HttpStatus.BAD_REQUEST.value(), "上传文件为空,请重新上传");
        }
        else if (!suffix.equals("xls")&&!suffix.equals("xlsx")){
    
            return ReturnResult.failed(HttpStatus.BAD_REQUEST.value(), "文件格式错误,请上传excel文件");
        }
        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        /** 因为模板中有两行为提示信息,所以这儿设置从0,2之后读取 */
        List<MagBackAmountInfo> blackDtos = reader.read(0, 2, MagBackAmountInfo.class);
        if (blackDtos.size() == 0) {
    
            return ReturnResult.failed(HttpStatus.BAD_REQUEST.value(), "文件数据为空,请重新上传");
        } else {
    
            /** 可以直接批量插入,也可以在service层做一些关键值的判断 */
             backAmountInfoService.batchInsert(blackDtos);
          return   ReturnResult.ok();
        }
    }

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_48162563/article/details/131124627

智能推荐

[常用办公软件] wps怎么自动生成目录?wps自动生成目录的设置教程_wps目录自动生成-程序员宅基地

文章浏览阅读1.1w次,点赞3次,收藏5次。转载请说明来源于"厦门SEO"本文地址:http://www.96096.cc/Article/160880.html常用办公软件  WPS Office是由金山软件股份有限公司开发的一款针对个人永久免费的办公软件,在我们的日常生活和工作中,WPS Office比起微软Microsoft Office来说在文字上的处理会更深入国人用户的人心,熟悉操作WPS的办公小技巧,能够更高效的提高我们的工作效率,今天小编要为大家分享的是WPS怎么自动生成目录?快来一起看看WPS自动生成目录的设置教程吧。_wps目录自动生成

web项目-程序员宅基地

文章浏览阅读7.4k次,点赞2次,收藏19次。web项目是指服务端部署在服务器上,客户端使用浏览器通过网络传输进行访问获取数据的项目。通常我们看见的应用页面网站等等都可以称之为web项目。 在web项目的开发中可分为web前端开发和web后端开发 web前端:即是客户端能看得见碰得着得东西。包括Web页面结构、页面样式外观以及Web层面得交互展现。 前端特点:页面视觉效果良好(客户第一)、Web页面交互流畅(..._web项目

关于java操作excel导入导出三种方式_java导出excel的三种方法-程序员宅基地

文章浏览阅读5.6k次,点赞8次,收藏67次。java操作关于导入导出Excel的多种方式_java导出excel的三种方法

Windows系统环境变量path详解_windows path-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏21次。Windows path系统变量编辑_windows path

Hadoop基础教程-第13章 源码编译(13.2 Hadoop2.7.3源码编译)_hadoop2.7.3-src源码下载-程序员宅基地

文章浏览阅读512次。第13章 源码编译13.2 Hadoop2.7.3源码编译13.2.1下载Hadoop源码包(1)到官网http://hadoop.apache.org/releases.html下载2.7.3的source源码包(2)解压缩tar -zxvf hadoop-2.7.3-src.tar.gz -C /opt1(3)打开解压目录下的BUILDING.txt,编译过程和需要的软件其实就是根据这个文档里..._hadoop2.7.3-src源码下载

Latex 语法_\latex-程序员宅基地

文章浏览阅读1k次。Latex 语法_\latex

随便推点

【智能排班系统】基于AOP和自定义注解实现接口幂等性-程序员宅基地

文章浏览阅读884次。使用多种方式实现接口幂等性,通过定义注解方便对方法进行幂等性控制

SpringBoot整合Swagger2 详解_springboot swagger2 开关-程序员宅基地

文章浏览阅读324次。SpringBoot、Swagger2 整合详解_springboot swagger2 开关

spring boot 项目报错 java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized_springboot项目里面报错 the server time zone value ' й-程序员宅基地

文章浏览阅读2.8w次,点赞96次,收藏115次。报错说是时区不对因为mysql-connection-java版本导致时区的问题。pom.xml:控制台报错信息:java.sql.SQLException: The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You must configure ei..._springboot项目里面报错 the server time zone value ' й

最全Android Kotlin 学习路线(Kotlin 从入门、进阶到实战)_kotlin学习-程序员宅基地

文章浏览阅读4.2k次。Kotlin 是由 jetBrains 开发的一门现代多平台应用的静态编程语言,Kotlin 代码即可以编译成 Java 字节码,又可以编译成 JavaScript,Kotlin 是开源的,源码在这。Kotlin 包含了大量的语法糖,在编码的时候,会大大的简化我们的代码量及工作效率。且相比传统的 Java 语言,Kotlin 种大量的简写,可以减少很多用Java 必须要写的样板代码,减少大量的 if…else 等嵌套,减少大量接口的实现,代码结构也会更加清晰。_kotlin学习

【前端素材】推荐优质新鲜绿色蔬菜商城网站设计Harmic平台模板(附源码)-程序员宅基地

文章浏览阅读753次,点赞30次,收藏21次。在线绿色新鲜果蔬商店网站是指一个专门销售新鲜、绿色、有机水果和蔬菜的电子商务平台。这类网站旨在为消费者提供方便、快捷的购买渠道,同时确保他们能够购买到高质量、新鲜的产品。

elementui表格添加fixed之后样式异常_element table fixed 样式异常-程序员宅基地

文章浏览阅读1k次。最近写项目碰到一个bug 大概就是一个表格组件两个页面都会使用 组件中表格的某些列就用v-if控制了 表格的首尾列都用了fixed 然后就发生了bug 如下图 具体原因不明看过很多网上的办法 有在fixed的列绑定key的 也有使用doLayout()的 测了都没用 最后在一个前端交流群里一位大佬给出的办法 实测有效.el-table__header, .el-table__body, .el-table__footer { width: 100%; tab_element table fixed 样式异常