java-导入 导出 下载模板 等功能
一:先写 导入
1:java是基于包:poi 组件实现的,pom组件如下:
<!-- Excel导入功能实现 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>
2:但是如果完全基于poi去做,需要封装很多代码,比较复杂一下,使用阿里的组件 easyexcel
该组件是基于 上面的poi 再封装一次完成。所以如果使用 easyexcel还是必须引用poi的包
pom里面的文件如下:但是这里需要注意 easyexcel 跟 poi的版本一定要对应起来,如果不对应就会报错,错误信息是:提示某一个类不存在
java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/FileMagic
<!-- alibaba的Excel导入功能实现 --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.8</version></dependency>
3:控制器 Controller 里面的API代码:
需要注意:
EasyExcel 就是阿里组件里面的类;
HealthTargetImport 是自定义的模板样式;如下,也贴出来
MultipartFile 是 springframework里面的封装类
count = this.service.importExcel(healthTargetImports) 这句话就是 自己写的批量添加方法,
因为上面已经拿到了excel的数据。存放在healthTargetImports 中,所以后面怎么玩都行,
@PostMapping("/importExcel")@ApiOperation(value = "导入功能", notes = "导入功能")public ApiResponse<Integer> importExcel(@RequestParam("file") MultipartFile file) throws IOException {InputStream inputStream = file.getInputStream();List<HealthTargetImport> healthTargetImports = EasyExcel.read(inputStream).head(HealthTargetImport.class)// 设置sheet,默认读取第一个.sheet()// 设置标题所在行数.headRowNumber(1).doReadSync();// 获取excel的数据后添加到数据库int count = 0;if (healthTargetImports.size() > 0) {count = this.service.importExcel(healthTargetImports);}return ApiResponse.success(count);}
package com.health.util.data.excel;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;/*** 对接单位检项 细项 指标导入模板*/
@Data
public class HealthTargetImport {/*** 单位编码*/@ExcelProperty(value = "单位编码",index = 0)private String healthCode;/*** 项目编码*/@ExcelProperty(value ="项目编码",index = 1)private String healthProjectCode;/*** 项目名称*/@ExcelProperty(value = "项目名称",index = 2)private String healthProjectName;/*** 指标编码*/@ExcelProperty(value = "指标编码",index = 3)private String healthTargetCode;/*** 指标名称*/@ExcelProperty(value = "指标名称",index = 4)private String healthTargetName;/*** 数据类型*/@ExcelProperty(value = "数据类型",index = 5)private String dataType;/*** 备注*/@ExcelProperty(value = "备注",index = 6)private String remarks;/*** 对接单位项目内容*/@ExcelProperty(value = "对接单位项目内容",index = 7)private String healthProjectContent;/*** 对接单位项目说明*/@ExcelProperty(value = "对接单位项目说明",index = 8)private String healthProjectExplain;}
4:导入已完成。当然这里还可以去做对excel的每行 每列 做一些数据约束校验。这个 可以去对阿里的一个类去重写方法。
5:测试环节:
通常用swagger测试,很简单。
因为api的参数是MultipartFile类型,所以入参直接是现在文件,如图:选择模板一致的excel直接上传文件即可。
也可以用postman上传文件:
详细操作地址如下:
(2条消息) Postman Post请求上传文件_xulong5000的专栏-CSDN博客
二:下载模板
1:默认上面的导入功能已完成,所以 pom文件不再描述,
2:先写一个工具类ExcelUtil
public class ExcelUtil {/*** 导出* @param response* @param data* @param fileName* @param sheetName* @param clazz* @throws Exception*/public static void writeExcel(HttpServletResponse response, List<? extends Object> data, String fileName, String sheetName, Class clazz) throws Exception {//表头样式WriteCellStyle headWriteCellStyle = new WriteCellStyle();//设置表头居中对齐headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//内容样式WriteCellStyle contentWriteCellStyle = new WriteCellStyle();//设置内容靠左对齐contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);EasyExcel.write(getOutputStream(fileName, response), clazz).excelType(ExcelTypeEnum.XLSX).sheet(sheetName).registerWriteHandler(horizontalCellStyleStrategy).doWrite(data);}private static OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception {fileName = URLEncoder.encode(fileName, "UTF-8");response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");response.addHeader("Access-Control-Expose-Headers", "Content-disposition");return response.getOutputStream();}
3:在控制器中添加一个下载模板方法:
/*下载模板*/@GetMapping("/downloadTemplate")@ApiOperation(value = "下载模板", notes = "下载模板", produces = "application/octet-stream")public void downloadTemplate(HttpServletResponse response){String fileName = "对接单位细项导入模板";String sheetName="对接单位细项导入模板";List<HealthTargetImport> teacherExcelList = new ArrayList<>();HealthTargetImport teacherExcel = new HealthTargetImport();teacherExcel.setHealthCode("healthCode");
// teacherExcel.setIntro("清华毕业,高材生");
// teacherExcel.setCareer("资深讲师");
// teacherExcel.setSort(1);
// teacherExcel.setLevel(1);teacherExcelList.add(teacherExcel);try {//TeacherExcel.class对应你的模板类//teacherExcelList模板的例子//也可以使用这种方式导出你查询出数据excel文件ExcelUtil.writeExcel(response,teacherExcelList,fileName,sheetName,HealthTargetImport.class);} catch (Exception e) {System.out.println(e.getCause());}}
4:这里如果用postmat去测试 或者用swagger测试都会返回乱码,需要注意:
java-导入 导出 下载模板 等功能相关推荐
- 帝国cms如何导入php模板,帝国cms模板导入导出及模板组功能介绍
为了使网站能随心所欲更换风格与共享模板,EmpireCMS引入了模板组功能. 模板组的三大主要功能: 1.模板导出与导入,模板共享更加方便. 2.多模板并存. 3.随时更换网站模板. 4.单个ECMS ...
- EasyExcel导入导出下载模板(带下拉)
EasyExcel导入导出网上资料很多,这里就不多做描述了,总之就是一款比较轻而小,易用的excel操作工具包:这里在项目中使用到,做下笔记.以及表格中下拉框的实现: 声明:本文思路是借鉴于某大神的, ...
- ant Desgin vue 导入 导出 下载模板
先说导入吧, 首先 我们先发请求 代码如下: 按照自己的接口发请求,因为我这个用的是封装的, 因为我这个请求是总导入,好多个用一个,所以我们定义importType类型,来区分 //导入档案总 exp ...
- java中Excel导入,下载模板,附带前端展示
java中Excel导入,下载模板,附带前端展示 后台下载模板代码 /*** 多个模板下载*/@RequestMapping(value = "/downloadExcel", m ...
- 【Java实现导出Word文档功能 XDocReport +FreeMarker】
Java实现导出Word文档功能(XDocReport +FreeMarker) 前言 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的 ...
- java导入导出excel操作(jxl)
java导入导出excel操作(jxl) Java解释Excel数据(jxl.jar包的使用) 关键字: java excel jxl.jar jxl.jar 包 下载地址: http://www.a ...
- java 导入导出excel表格
java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...
- java导入导出excel_Java导入导出Excel工具 easyexcel
Java导入导出Excel工具 easyexcel 做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了.Java解析生成Excel比较有名 ...
- java excel 饼图,java 导入导出excle 和 生成柱状图饼状图的demo/excle数据如何转成饼状图...
在EXCEL中,如何把表格中的数据转换成饼状图? 在Excel中,把中的数据转换状图的操作步骤如下: 想转换的数据源,插入饼状图,Excel会自动根据选择的数据源生成饼状图.接下来,可以自定义饼状图的 ...
- java导入导出压缩包
java导入导出压缩包 最近有个需求,需要将导入导出压缩包格式的JSON文件,然后存入数据库中,特整理如下: 一:首先是导出压缩包 1.首先是controller /*** 接口必填配置导出** @a ...
最新文章
- plsql programming 10 日期和时间戳
- java validation_java bean validation 参数验证
- Vue蚂蜂窝Vue-cli+webpack做的
- 计算feature map大小
- 【Python基础】用Python制作漂亮的流动桑基图
- Java中的堆栈和队列
- 本地连不上远程mysql数据库(2)
- 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示
- 【Elasticsearch】十九种Elasticsearch字符串搜索方式
- JDK8新特性(十五)之重复注解、类型注解
- win7 oracle数据库删除用户名,win7操作系统、 oracle10g 数据库创建、卸载 用户名的创建 、删除...
- phpstudy for linux版环境安装
- 如何把linux生成镜像,如何把当前ubuntu系统做成镜像
- python socket 域名_python用socket发送http请求
- babel-preset-env使用介绍
- R语言ETL工程:连接(join)
- 经典剖析电源PCB布板与EMC的关系(上)
- android系统设置默认字体,如何获取Android设备的默认字体?
- 武汉大学计算机学院 夏令营,武汉大学计算机学院2020保研夏令营通知
- Doris0.13.15升级至0.14.12.4故障[Bug] NPE when replaying CheckConsistencyJob
热门文章
- Lorenz混沌系统建模与电路仿真实现
- Android知识点 121 —— AlarmManager与RTC唤醒
- C4D插件X-Particles粒子特效(三)
- 点扩散函数(PSF)的模型及求取
- HTML5期末大作业:电影网站设计——电影动漫言叶之庭(4页) web前端课程设计_web前端课程设计代码,web课程设计-HTML网页制作代码
- 串口通信协议之SPI通信协议
- Allegro之测量时显示两种单位(mil mm)
- 工具资源合集【持续更新】文字识别、英文写作、频段查询
- 微信小程序——微信授权获取手机号弹窗(官方自带)
- 桌面计算机系统安装系统文件,电脑重装系统后还原桌面文件步骤