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 文件上 ...
随机推荐
- SCVMM-VMWARE ACE虚拟机管理工具
SCVMM是微软的虚拟化管理工具 VMWARE ACE是另一套虚拟化的工具 这两套工具都是用来管理虚拟机的,可以直接将物理机虚拟化为虚拟机 企业一旦发展到了一定阶段,并然需要自己的服务器和虚拟化环境, ...
- “System.Runtime.InteropServices.COMException”类型的第一次机会异常在 ESRI.ArcGIS.Version.dll 中发生
“System.Runtime.InteropServices.COMException”类型的第一次机会异常在 ESRI.ArcGIS.Version.dll 中发生 其他信息: The speci ...
- 【Java】基本类型和引用类型(值传递)
[关键词] [问题] · 加深对基本类型和引用类型的理解: [效果图] [分析] 參见最后的[參考资料] [解决方式] [代码] public void test() throws Exception ...
- ScrollView嵌套ExpandableListView显示不正常的问题
关于ScrollView嵌套ExpandableListView导致ExpandableListView显示不正常的问题解决方法有非常多,在这里介绍一种小编亲自測试通过的方法. 重写Expandabl ...
- POJ2230题解
题目来源 id=2230">http://poj.org/problem?id=2230 题目大意 求无向图从起点1開始从不同方向经过全部边的一条路径.输出随意一条. 题解 把无向图的 ...
- HDU-5310-Souvenir(C++ && 简单数学题)
Souvenir Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- Tomcat报错合集
1.java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start c ...
- WINDOWS XP 系统显示乱码的解决方法(修改注册表,使用正常字体)
一位同事的计算机进入WINDOWS XP系统后,电脑里的所有汉字全部显示乱码,很多办公文档无法打开而影响工作.因为第一次遇到这种问题,当然首先是百度解决了,搜索了相关的信息后找到了答案 ...
- 框架:Rureka
ylbtech-框架:Rureka Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.S ...
- 将python的程序包装成windows下的service
使用python编写的脚本应用程序,在运行的时候需要有python的运行环境,但是我们肯定是希望整个python程序能够像应用程序一样打包生成一个包括其运行环境的exe文件包,这是第一步,但是要想使用 ...