第一步,先引入easypoi依赖:

 <!-- easypoi 核销包 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version><exclusions><exclusion><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion></exclusions></dependency><!-- easypoi web包 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>3.2.0</version></dependency><!-- easypoi 注解包 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>3.2.0</version></dependency>

第二步,创建工具类

package com.sport.sportdigitalmanagement.utils;import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;/*** @author zdj* @date 2022-04-26*/
public class FileUtil {public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response){ExportParams exportParams = new ExportParams(title, sheetName);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(list, pojoClass, fileName, response, exportParams);}/*** 导出* @param list 需要导出的集合* @param title excel标题名称* @param sheetName sheet表名称* @param pojoClass 转化的实体类对象* @param fileName 文件名称* @param response 导出后的响应*/public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response){defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));}public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){defaultExport(list, fileName, response);}private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) {Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);if (workbook != null);downLoadExcel(fileName, response, workbook);}private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));workbook.write(response.getOutputStream());} catch (IOException e) {e.printStackTrace();//throw new NotFoundException(e.printStackTrace());}}private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);if (workbook != null);downLoadExcel(fileName, response, workbook);}public static <T> List<T> importExcel(String filePath,Integer titleRows,Integer headerRows, Class<T> pojoClass){if (StringUtils.isBlank(filePath)){return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);}catch (NoSuchElementException e){e.printStackTrace();//throw new NotFoundException("模板不能为空");} catch (Exception e) {e.printStackTrace();//throw new NotFoundException(e.getMessage());}return list;}/*** 导入* @param file 需要导入的文件* @param titleRows 从第一行开始解析* @param headerRows 头部行下标* @param pojoClass 转化为对应的实体类* @param <T>* @return 返回解析后的实体类对象集合*/public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){if (file == null){return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);}catch (NoSuchElementException e){//throw new NotFoundException("excel文件不能为空");e.printStackTrace();} catch (Exception e) {e.printStackTrace();// throw new NotFoundException(e.getMessage());}return list;}
}

第三步,导出
controller:

/*** 局系统总预算信息列表--导出* @return*/@ApiOperation(value = "局系统总预算信息列表--导出", notes = "局系统总预算信息列表--导出", httpMethod = "POST")@RequestMapping(value = "/exportTotalBudgetStatisticsList", method = RequestMethod.POST)public void exportTotalBudgetStatisticsList(@RequestHeader String adminToken, @RequestBody TotalBudgetDTO totalBudgetDTO, HttpServletResponse res){// 处理参数对象try {//        Account account = redisService.get(adminToken, Account.class);//        if (account == null) {//            return ResultData.token();//        }// 参数过滤if(!CommonStringUtils.getFiledDescribe().contains(totalBudgetDTO.getFieldName())){throw new Exception("月份对应的字段描述错误!");}// 调用服务处理业务totalBudgetService.exportTotalBudgetStatisticsList(totalBudgetDTO, res);} catch (Exception e) {logger.error("局系统总预算信息列表--导出出现异常:", e);}}

servicer:

/*** 局系统总预算信息列表--导出* @return*/public void exportTotalBudgetStatisticsList(TotalBudgetDTO totalBudgetDTO, HttpServletResponse res) {// 获取预算列表List<TotalBudget> totalBudgetList = this.getAllCommonTotalBudgetList(totalBudgetDTO);//导出的excel的名称String fileName = "局系统总预算信息列表";FileUtil.exportExcel(totalBudgetList, fileName, fileName, TotalBudget.class, System.currentTimeMillis() + "", res);}

导出的映射实体类:

package com.sport.sportdigitalmanagement.po;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;/*** @description total_budget* @author zdj* @date 2022-04-26*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TotalBudget implements Serializable {/*** 不需要导出的请用改注解*/@ExcelIgnoreprivate Integer id;/*** 部门*/@Excel(name = "预算单位/类别", orderNum = "1", width = 25)@ApiModelProperty("部门")@Column(name="department")private String department;/*** 指标数*/@Excel(name = "指标数", orderNum = "2", width = 15)@ApiModelProperty("指标数")@Column(name="target")private BigDecimal target;/*** 结余指标数*/@Excel(name = "结余指标数", orderNum = "4", width = 15)@ApiModelProperty("结余指标数")@Column(name="balance_target")private BigDecimal balanceTarget;/*** 年度*/@Excel(name = "年度", orderNum = "1", width = 15)@ApiModelProperty("年度")@Column(name="year")private Integer year;/*** 执行进度*/@Excel(name = "执行进度", orderNum = "5", width = 15)@ApiModelProperty("执行进度")@Column(name="progress")private BigDecimal progress;/*** 统一展示的字段*/@Excel(name = "支出数", orderNum = "5", width = 15)@ApiModelProperty("统一展示的字段")@Transientprivate BigDecimal commonFiled;
}

第四步:导入
controller:

/*** 局系统总预算信息列表--导入* @param adminToken  登录用户* @param file 文件* @throws Exception*/@ApiOperation(value = "局系统总预算信息列表--导入", notes = "局系统总预算信息列表--导入", httpMethod = "POST")@RequestMapping(value = "/importTotalBudgetStatisticsList", method = RequestMethod.POST)public ResultData<Object> importTotalBudgetStatisticsList(@RequestHeader String adminToken,@ApiParam(name = "file", value = "excel文件") @RequestParam(value = "file", required = false) @RequestPart MultipartFile file) throws Exception {// 处理参数对象try {//        Account account = redisService.get(adminToken, Account.class);//        if (account == null) {//            return ResultData.token();//        }// 参数过滤if (file == null || file.getBytes() == null){return ResultData.error("文件不能为空!");}// 调用服务处理业务return totalBudgetService.importTotalBudgetStatisticsList(file);} catch (Exception e) {logger.error("局系统总预算信息列表--导入异常:", e);}// 返回结果return ResultData.exp();}

service:

/*** 局系统总预算信息列表--导入* @param file 文件* @throws Exception*/public ResultData<Object> importTotalBudgetStatisticsList(MultipartFile file) {// 先将excel数据转换为list集合数据List<TotalBudgetVo> convertAfterList = FileUtil.importExcel(file, 0, 1, TotalBudgetVo.class);if(CollectionUtils.isEmpty(convertAfterList)){return ResultData.error("Excel数据为空,excel转化失败!");}// 过滤掉不必要的数据集合for (int i = 0; i < convertAfterList.size(); i++) {TotalBudgetVo convertAfter = convertAfterList.get(i);if(StringUtils.isEmpty(convertAfter.getDepartment())){convertAfterList = convertAfterList.subList(0, i);break;}}// 申请提示返回对象StringBuffer lastMsg = new StringBuffer();lastMsg.append("共计【"+convertAfterList.size()+"】条!");// 当前行索引int index = 1;int successIndex = 0;for (TotalBudgetVo convertAfter : convertAfterList) {index ++;// 过滤预算单位/类别String department = StringUtils.isEmpty(convertAfter.getDepartment()) ? "" : convertAfter.getDepartment().trim().replaceAll(" ","");if(StringUtils.isEmpty(department)){lastMsg.append("第【"+index+"】行预算单位/类别为空!");continue;}/***   导入中奖用户   ****/TotalBudget totalBudget = new TotalBudget();totalBudget.setDepartment(convertAfter.getDepartment());totalBudget.setTarget(new BigDecimal(convertAfter.getTarget()));totalBudget.setYear(Integer.parseInt(convertAfter.getYear()));totalBudget.setJanuary(new BigDecimal(StringUtils.isEmpty(convertAfter.getJanuary()) ? "0" : convertAfter.getJanuary()));totalBudget.setFebruary(new BigDecimal(StringUtils.isEmpty(convertAfter.getFebruary()) ? "0" : convertAfter.getFebruary()));totalBudget.setMarch(new BigDecimal(StringUtils.isEmpty(convertAfter.getMarch()) ? "0" : convertAfter.getMarch()));totalBudget.setApril(new BigDecimal(StringUtils.isEmpty(convertAfter.getApril()) ? "0" : convertAfter.getApril()));totalBudget.setMay(new BigDecimal(StringUtils.isEmpty(convertAfter.getMay()) ? "0" : convertAfter.getMay()));totalBudget.setJune(new BigDecimal(StringUtils.isEmpty(convertAfter.getJune()) ? "0" : convertAfter.getJune()));totalBudget.setJuly(new BigDecimal(StringUtils.isEmpty(convertAfter.getJuly()) ? "0" : convertAfter.getJuly()));totalBudget.setAugust(new BigDecimal(StringUtils.isEmpty(convertAfter.getAugust()) ? "0" : convertAfter.getAugust()));totalBudget.setSeptember(new BigDecimal(StringUtils.isEmpty(convertAfter.getSeptember()) ? "0" : convertAfter.getSeptember()));totalBudget.setOctober(new BigDecimal(StringUtils.isEmpty(convertAfter.getOctober()) ? "0" : convertAfter.getOctober()));totalBudget.setNovember(new BigDecimal(StringUtils.isEmpty(convertAfter.getNovember()) ? "0" : convertAfter.getNovember()));totalBudget.setDecember(new BigDecimal(StringUtils.isEmpty(convertAfter.getDecember()) ? "0" : convertAfter.getDecember()));totalBudget.setCreateTime(LocalDateTime.now());totalBudget.setIsValid(1);int affectRow = totalBudgetMapper.insert(totalBudget);if(affectRow > 0){successIndex ++;}}// 返回提示if(successIndex == convertAfterList.size()){lastMsg.append("导入成功【"+successIndex+"】条!");} else {if(successIndex == convertAfterList.size()){lastMsg.append("导入成功【"+successIndex+"】条!");} else {lastMsg.append("注:导入失败【"+(convertAfterList.size() - successIndex)+"】条!导入成功【"+successIndex+"】条!");}}// 返回结果return ResultData.ok(lastMsg.toString(), null);}

导入对应的映射实体:

package com.sport.sportdigitalmanagement.vo;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;/*** @description TotalBudgetVo* @author zdj* @date 2022-04-26*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TotalBudgetVo implements Serializable {@Excel(name = "预算单位/类别", orderNum = "1", width = 25)private String department;@Excel(name = "年度", orderNum = "2", width = 15)private String year;@Excel(name = "指标数", orderNum = "3", width = 15)private String target;@Excel(name = "1月支出数", orderNum = "4", width = 15)private String january;@Excel(name = "1-2月支出数", orderNum = "5", width = 15)private String february;@Excel(name = "1-3月支出数", orderNum = "6", width = 15)private String march;@Excel(name = "1-4月支出数", orderNum = "7", width = 15)private String april;@Excel(name = "1-5月支出数", orderNum = "8", width = 15)private String may;@Excel(name = "1-6月支出数", orderNum = "9", width = 15)private String june;@Excel(name = "1-7月支出数", orderNum = "10", width = 15)private String july;@Excel(name = "1-8月支出数", orderNum = "11", width = 15)private String august;@Excel(name = "1-9月支出数", orderNum = "12", width = 15)private String september;@Excel(name = "1-10月支出数", orderNum = "13", width = 15)private String october;@Excel(name = "1-11月支出数", orderNum = "14", width = 15)private String november;@Excel(name = "1-12月支出数", orderNum = "15", width = 15)private String december;
}

完成

java使用easypoi导入,导出相关推荐

  1. java实现excel导入导出,对象图片读取,上传七牛云

    java实现excel导入导出以及解决方案 因为公司业务需求,要完成针对表格的导入导出,excel这里使用MultipartFile类接收 ,下面是部分关键代码,希望有所帮助 //获取excel文件的 ...

  2. Java EXCEL 表格导入导出(带下拉选-带VLOOKUP函数封装)

    Java EXCEL 表格导入导出(带下拉选-带VLOOKUP函数封装) 对于excel Java POI 使用 目前简单导出导入功能网上很多,但是对于有下拉选,样式等缺点却是最大硬伤,故此封装一个通 ...

  3. Java POI Excel导入导出

    Java POI Excel导入导出 1.maven引入依赖 2.导入Excel 3.导出Excel 1.maven引入依赖 <!-- POI Excel 操作 --> <depen ...

  4. 使用EasyPoi导入导出Excel

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...

  5. 使用easypoi导入导出excel,SSM和SpringBoot通用代码

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言(熟悉 ...

  6. 使用EasyPOI导入导出报表

    简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员,就可以方便的写出Excel导出,Excel模板导出,Excel导入,word模板导出,通过简单的注解和模板 ...

  7. EasyPoi导入导出(一)

    EasyPoi是一个文件导入导出的工具插件,官网:http://doc.wupaas.com/docs/easypoi/easypoi-1c0u4mo8p4ro8 一.EasyPoi简单应用:导出ex ...

  8. Java操作Excel导入导出(EasyExcel)

    在管理一个系统时,总会有许多的数据,为了方便浏览查看数据,系统总会提供「导出Excel」的功能:有导出就有导入,在要向数据库中插入大量的数据时,我们向程序提供准备好的 Excel,然后程序读取表格内容 ...

  9. Java实现Excel导入导出操作详解

    前言 本次封装是基于 POI 的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求. 1. 功能测试 1.1 测试准备 在做测试前,我们需要將[2. 环境准备]中的 ...

  10. Java实现Excel导入导出操作

    java 对excel的导入及导出 最近在做对excel的导入导出,在平常的工作中,导入导出excel数据是常见的需求,今天就简单的记录一下Java是如何来实现这个功能的,感兴趣或者正好大家在工作中遇 ...

最新文章

  1. Activity的LaunchMode
  2. out和ref之间的区别
  3. 文档模型(JSON)使用介绍
  4. 第14课:动手实战中文命名实体提取
  5. java instanceof 继承_继承_instanceOf的使用
  6. Eclipse Java类编辑器里出现乱码的解决方案
  7. java postconstruct_spring框架中@PostConstruct的实现原理
  8. java中你知道这四种代码块吗?
  9. 计算机一级怎么描述,计算机一级「关于RGB正确的描述的是」相关单选题
  10. 高质量JAVA代码编写规范
  11. android高德地图绘制多边形_Android安卓高德地图实现多边形绘制与编辑
  12. win32开发(按键消息)
  13. vue设置列表数据添加
  14. Flink系列之流式
  15. android 播放器 下载,VPlayer安卓最新版
  16. 354. 俄罗斯套娃信封问题--(每日一难phase2--day9)
  17. 如何写一份大家都满意的专利说明书
  18. F - Ubiquitous Religions
  19. win10支持8t 硬盘_教你如何解决win10系统识别不了移动硬盘?
  20. 白盒测试和黑盒测试(感谢东子哥作答)

热门文章

  1. 希捷服务器硬盘型号,希捷硬盘有哪些型号?
  2. Rosbag格式在线解压缩
  3. 我的程序员之路(15)——2019年前半年总结
  4. usb万能驱动win7_8代能不能装win7?测给你看
  5. MOS管和电机驱动(一):MOS管的栅极电阻和GS电阻 米勒效应与米勒平台
  6. RFID无线射频识别技术基本原理FAQ
  7. 关于虚拟现实(VR)内容开发综述
  8. 卡西欧95计算机怎么玩游戏,你真的会用计算器么?来玩转卡西欧计算器吧
  9. 虚拟机和服务器如何分辨率,虚拟大师怎么设置分辨率最好 虚拟机分辨率
  10. 学校的论文答辩---问题准备