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 文件上 ...
随机推荐
- Java反射获取class对象的三种方式,反射创建对象的两种方式
Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...
- linux下的mongodb数据库原生操作
mongodb,是一种结构最像mysql的nosql mysql中的数据库,mongodb中也有,区别在于, myql中数据库下的是表,字段和数据的形式存在 mongodb数据库下的是叫集合(和pyt ...
- Java代码模拟http请求的两种方式
z这里用百度地图的逆地理编码接口为例, 第一种方式:(通过jdk中的java.net包) 引入工具类 import java.net.URL; import java.net.URLConnectio ...
- Locally managed (LMT) vs. Dictionary managed (DMT) tablespace
The LMT is implemented by adding the extent management local clause to the tablespace definition syn ...
- hdu 3555数位dp基础入门题
#include<stdio.h> #define N 20 long long dp[N][3]; void init(){ long long i; dp[0][0]=1; for ...
- 3.2 re--正則表達式操作(Regular expression operations)
本模块提供了正則表達式的匹配操作,它的功能跟Perl语言里的功能一样. 不管是Unicode字符串还是单字节8位组成的字符串,都能够使用模式匹配和字符串查找的功能. 只是要注意的是Unicode字符串 ...
- 基于SpringMVC+SpringJDBC的用户管理系统(增删查改)
鉴于MyBatis暂时不会用,所以用刚学的SpringJDBC代替,也很简洁.以下贴出几个重要的代码. 1.UserDaoImpl数据库操作实现类 package com.wxy.dao.impl; ...
- scanf,printf函数细节
今天笔试的时候遇到一个考察C语言scanf函数的题目 int x; float y; scanf("%3d%f",&x,&y); // input 123456 6 ...
- 黑马day01 笔记
一.xml语法 1.文档声明 用来声明xml的基本属性,用来指挥解析引擎怎样去解析当前xml 通常一个xml都要包括而且仅仅能包括一个文档声明 xml的文档必须在整个xml ...
- luogu1969 积木大赛
题目大意 搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成n块高度为 0 的积木).接下来每次操作,可以选择一段连 ...