java中excel文件上传
java文件上传
excel文件上传的两种方式
1.使用ExcelsUtils上传文件
2.把文件转换成流上传(支持多sheet)
代码实现
第一种方式
ExcelsUtils.ReadMultipartFile()可以直接读取文件 把文件转为byte数组 然后把字节数组转为json或者map,
第二种方式 把文件直接转为流(InputStream ins = new ByteArrayInputStream(file.getBytes())) 引入 new HSSFWorkbook(流)处理多sheet的情况
private List<Entity> readAndSetImport(MultipartFile file) {// 获得文件流InputStream ins = null;Workbook workbook = null;try {ins = new ByteArrayInputStream(file.getBytes());} catch (IOException e1) {log.error("读取流出错:{}", e1.getMessage());return null;}try {// 2007版本的excel,用.xlsx结尾workbook = new XSSFWorkbook(ins);} catch (Exception ex) {try {ins.reset();// 2003版本的excel,用.xlsworkbook = new HSSFWorkbook(ins);} catch (IOException e) {log.error("解析excel出错:{}", e.getMessage());return null;}}List<Entity> entitys= new ArrayList<>();try {// 获得第一个工作页Sheet sheet = workbook.getSheetAt(0);// 获得所有的字段Field[] fields = Entity.class.getDeclaredFields();Field field;List<String> fileList = new ArrayList<>(); // 文件里的中文字段名对应的对象字段名集合// 记录有多少行空的数据int count = 1;// 记录数据是从第几列开始记录的int begin = 0;for (int a = 0; a <= sheet.getLastRowNum(); a++) {Row row = sheet.getRow(a);if (row == null) {count++;continue;}boolean flag1 = false; // 标记该行有无数据for (Cell cell : row) {if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {flag1 = true;break;}}if (flag1 == false) {count++;continue;}if (a < count){continue;}// 获得第一行不为空的数据为字段名if (a == count) {for (int b = 0; b < row.getLastCellNum(); b++) {Cell cell = row.getCell(b);if (fileList.isEmpty() && (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK)) {begin++;} else {for (int i = 0; i < fields.length; i++) {field = Entity.class.getDeclaredField(fields[i].getName());ValidationField annotation = field.getAnnotation(ValidationField.class);if (annotation != null) {String value = annotation.value();String excelField = cell.toString();if (excelField.equals(value)) {fileList.add(fields[i].getName());break;}}}}}} else {Entity entity = new Entity();entity.setNumber(a + 1 + ""); // 设置行号for (int i = 0; i < fileList.size(); i++) {Cell cell = row.getCell(begin + i);if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {continue;}field = Entity .class.getDeclaredField(fileList.get(i));field.setAccessible(true);// 读取excel表格设置对象字段值setFieldByExcel(entity, field, cell);}entitys.add(entity);}}} catch (Exception e) {log.error("解析excel 出错:{}",e.getMessage()); }return entitys;}
对应实体类 (顺序不要随意更改)
@Data
public class Entity{
@ValidationField("行号")
private String number;@ValidationField("姓名(*必填)")
private String userName;@ValidationField("性别(*必填)")
private String gender;..................................................................................private String errorDetails = "";
private List<String> errorFields = new ArrayList<>();
}
/*** 设置对象字段值(读取excel表)** @param vo* 对象* @param field* 字段* @param cell* 单元格*/private void setFieldByExcel(Entity entity, Field field, Cell cell) throws Exception {if (cell != null) {cell.setCellType(CellType.STRING);}if (field.getType() == String.class) {field.set(entity, cell.getStringCellValue());}}
java中excel文件上传相关推荐
- java语言 文件上传,java中实现文件上传的方法
java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...
- java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载
java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...
- java实现excel文件上传并解析内容保存到数据库中
基于struts框架的web项目中excel文件的上传导入到数据库中的java代码 原理:将要上传的文件已流的形式传到服务器,服务器中接收到文件数据流并生成文件到服务器指定位置,java解析服务器生成 ...
- Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)
相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...
- java中ftp文件上传和中文乱码解决
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 前几天 有个需求就是上传文件的时候,本地存一份,其他服务器也保存一份,于是就研究了一下,功能只实现了 ...
- java实现Excel文件上传下载(模板)-hutool
引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</arti ...
- java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中
java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...
- Springboot+thymeleaf实现excel文件上传+后台数据搜索
废话不多说,直接上代码 先说excel文件上传 用的是poi框架 先贴maven配置 <!-- poi导入excel文件--><dependency><groupId&g ...
- SSM项目的excel文件上传并添加到数据库
SSM项目的excel文件上传并添加到数据库(新手,不足之处请多多指教) 基于学校的课设,要用到excel文件的上传和数据库导入,在网上找了好多demo,最后找到一篇使用poi的,经过修改后,可以正常 ...
最新文章
- Android socket 编程 实现消息推送(二)
- VS2012下安装配置OpenCV2.4.9的方法
- WebDriver高级应用实例(7)
- 1066. 图像过滤(15)
- sqlserver存储过程加锁后怎么解锁_【缺陷周话】第59期:重复加锁
- imagick用法!
- Linux进制查看工具:od、hexdump、xxd
- System verilog利用class类打印信息
- Java Web学习总结(5)——HttpServletResponse对象详解
- 设计模式之建造者(builder)模式
- workman 心跳
- 从盆景与景观看中西文化差异
- 串口程序设计——struct termios结构体
- Ubuntu修改键盘布局
- 相似度融合网络:用于聚合不同的基因数据类型:Similarity network fusion for aggregating data types on a genomic scale
- 神州笔记本电脑开机出现CMOS message【已解决】
- 【PM】软件项目管理流程和方法
- 情人节 玫瑰花表白源码
- 世界第一台计算机是多少位,世界上第一台计算机的字长是多少位?
- Virgo与Maven整合开发环境搭建(三)
热门文章
- Python的字符串操作
- 计算机无法关闭开机密码,电脑怎么关闭开机密码 电脑开机取消登录密码的两种方法...
- CentOS7开机或断网后无法自动连接网络
- ubuntu18.04编译GB28181Server
- MatchVs与CocosCreater
- Matchvs系列教程之利用微信web开发者工具开发联网游戏
- Thread、ThreadLocal、ThreadLocalMap是什么?看这一篇
- 技术丨压测工具wrk和Artillery的比较
- 一台电脑!利用Python当副业!实现月入过万
- Loadrunner pacing与thinktime