Java解析导入Excel文件后台代码实现
使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传)
由于POST一个包含文件上传的Form会以multipart/form-data请求发送给服务器,必须明确告诉转发器(DispatcherServlet)如何处理MultipartRequest。首先,在配置文件中声明一个MultipartResolver;
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为1MB(也可以不配置而在代码中限制上传的文件大小) -->
<property name="maxUploadSize">
<value>1048576</value>
</property>
</bean>
代码所需jar包下载地址:
https://files.cnblogs.com/files/Big-Boss/Java%E5%AF%BC%E5%85%A5Excel%E6%96%87%E4%BB%B6%E6%89%80%E9%9C%80jar%E5%8C%85.zip
注:以下代码只能满足基本需求,需根据实际需求做代码更改。
代码:
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/**
* 解析导出的Excel文件
* 注:需根据实际需求做代码更改
* @author 【】
*
*/
public class ImportExcelUtil {
/*
* 导入Excel文件
* @param obj 导入文件数据对应的实体类
* @param request HttpServletRequest请求request
* @return 解析后数据集合
*/
public List<Object> importExcel(Object obj, HttpServletRequest request) {
// 将请求转化为多部件的请求
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 解析多部件请求文件
MultipartFile mFile = multipartRequest.getFile("importFile");
// 获得上传文件的文件名
String fileName = mFile.getOriginalFilename();
// 获取文件扩展名
String eName = fileName.substring(fileName.lastIndexOf(".")+1);
InputStream inputStream = mFile.getInputStream();
Workbook workbook = getWorkbook(inputStream, eName);
// 获取工作薄第一张表
Sheet sheet = workbook.getSheetAt(0);
// 获取名称
String sheetName = sheet.getSheetName().trim();
// 获取第一行
Row row = sheet.getRow(0);
// 获取有效单元格数
int cellNum = row.getPhysicalNumberOfCells();
// 表头集合
List<String> headList = new ArrayList<>();
for (int i = 0; i < cellNum; i++) {
Cell cell = row.getCell(i);
String val = cell.getStringCellValue();
headList.add(val);
}
Map<String, Field> map = getObjComment(obj);
// 获得有效行数
int rowNum = sheet.getPhysicalNumberOfRows();
// 定义导出文件中数据集合
List<Object> objList = new ArrayList<>();
for (int i = 1; i < rowNum; i++) {
row = sheet.getRow(i);
Object data = new Object();
for (int j = 0; j < headList.size(); j++) {
// 解析单元格
Cell cell = row.getCell(j);
// 根据字段给字段设值(根据实际需求更改代码)
Field field = map.get(headList.get(j));
field.setAccessible(true);
field.set(data, cell.getStringCellValue());
}
objList.add(data);
} return objList;
} /*
* 利用java反射机制获取该类及父类的字段@Comment("")注解和字段信息Map集合
*/
public Map<String, Field> getObjComment(Object obj) {
Map<String, Field> map = new HashMap<>();
// 获取该类所有字段信息
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
Comment comment = field.getAnnotation(Comment.class);
if (null == comment) {
continue;
}
if (StringUtils.isNotBlank(comment.value())) {
map.put(comment.value(), field);
}
}
// 获取其父类所有属性(字段信息)
Field[] superFields = obj.getClass().getSuperclass().getDeclaredFields();
for (Field field : superFields) {
Comment comment = field.getAnnotation(Comment.class);
if (null == comment) {
continue;
}
if (StringUtils.isNotBlank(comment.value())) {
map.put(comment.value(), field);
}
}
return map;
} /*
* 根据excel文件格式获知excel版本信息
*/
public static Workbook getWorkbook(InputStream fs,String str){
Workbook book = null;
try{
if ("xls".equals(str)) {
// 2003
book = new HSSFWorkbook(fs);
} else {
// 2007
book = new XSSFWorkbook(fs);
}
}catch (Exception e) {
e.printStackTrace();
}
return book;
} }
Java解析导入Excel文件后台代码实现的更多相关文章
- Spring Boot下的一种导入Excel文件的代码框架
1.前言 Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...
- Java POI导入Excel文件
今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...
- java如何导入Excel文件
Java使用POI导入Excel文件,操作起来比较简单,支持xlsx格式. 下载POI资源包 从官网https://poi.apache.org/下载POI,笔者选择的是版本是3.17,下载后文件名是 ...
- java解析导入excel表格转为实体类javabean,根据实体类中的中文名称
最近公司需求解析excel,一开始使用poi做的挺好的,后来直接上了几十万条数据的excel文件,内存直接溢出了,网上查到apache poi还提供了专门处理海量数据的方法,使用sax解析,果然用了内 ...
- java poi导入Excel(个人代码)
案例使用的框架:jsp+spring+mybaties <form id="importForm" name="importForm" method=&q ...
- Java实现导入Excel文件
一.配置文件名称.路径.内容: <bean id="multipartResolver" class="org.springframework.web.multip ...
- excel文件后台代码
很多情况下,我们都需要从Excel中获取数据来创建Word报表文档.首先在Excel中分析数据,然后将分析结果导出到Word文档中发布.技术实现方式:1.创建Word模板,用来作为数据分析结果发布平台 ...
- Java jxl导入excel文件,导入的数字、身份证号码、手机号变成了科学计数法,解决方案
原文出自:https://blog.csdn.net/seesun2012 这是一个execl文件导入数据库操作,使用jxl解析execl导入数据库过程出现了科学计数法,与想要导入的数据不匹配,以下是 ...
- java上传excel文件及解析
java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...
随机推荐
- Python列表、集合与字典(3)
目录 一.列表 二.集合 三.字典 一.列表 1. 列表初识 列表的使用为处理特定顺序排列的数据提供了便利,列表元素可以是字母.数字或者其他信息,同时所加元素之间不存在任何关系. 在Pytho ...
- 《你又怎么了我错了行了吧》第八次团队作业:Alpha冲刺
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十二 团队作业8 团队名称 你又怎么了我错了行了吧 作业学习目标 (1)掌握软件测试基础技术 (2)学习迭代式增量软件开发过程,完 ...
- Python 实现把 .cvs 文件保存为 Excel 文件
# 导入可以把 CVS 转换为 Excel 的外部模块 import pandas as pd # 读出 csv 文件的内容 csv = pd.read_csv('Data.csv', encodin ...
- (33)Spring Boot 监控和管理生产环境【从零开始学Spring Boot】
[本文章是否对你有用以及是否有好的建议,请留言] spring-boot-actuator模块提供了一个监控和管理生产环境的模块,可以使用http.jmx.ssh.telnet等拉管理和监控应用.审计 ...
- Redis命令操作简介及五种value数据类型
转自:https://blog.csdn.net/ty4315/article/details/52050721 Redis是使用键值存储数据,key必须是字符串value支持五种数据类型,最新版本又 ...
- chrome js 获取css
var myDiv = document.getElementById("chooseRect"); var computedStyle = document.defaultVie ...
- Ruby对象、变量和常量
Ruby操作的数据主要有部分:对象.类.变量.常量. 对象 在Ruby中表示数据的基本单位称为对象,在Ruby中一切都是对象. 经常使用对象: 数值对象 2.3.14.-5等表示数字的对象,另外还有矩 ...
- 性能优化——mysql数据库
一 mysql经常使用命令 1. 打开日志 1) show global variables like "%genera%"; 2)set global general_log=o ...
- UVA 10187 From Dusk Till Dawn /PC 110907
不吐槽.. #include <iostream> #include <map> #include <queue> //无语的水题.节哀吧.且这道题不严谨,因为没说 ...
- Anton and Letters
Anton and Letters time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...