使用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文件后台代码实现的更多相关文章

  1. Spring Boot下的一种导入Excel文件的代码框架

    1.前言 ​ Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...

  2. Java POI导入Excel文件

    今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...

  3. java如何导入Excel文件

    Java使用POI导入Excel文件,操作起来比较简单,支持xlsx格式. 下载POI资源包 从官网https://poi.apache.org/下载POI,笔者选择的是版本是3.17,下载后文件名是 ...

  4. java解析导入excel表格转为实体类javabean,根据实体类中的中文名称

    最近公司需求解析excel,一开始使用poi做的挺好的,后来直接上了几十万条数据的excel文件,内存直接溢出了,网上查到apache poi还提供了专门处理海量数据的方法,使用sax解析,果然用了内 ...

  5. java poi导入Excel(个人代码)

    案例使用的框架:jsp+spring+mybaties <form id="importForm" name="importForm" method=&q ...

  6. Java实现导入Excel文件

    一.配置文件名称.路径.内容: <bean id="multipartResolver" class="org.springframework.web.multip ...

  7. excel文件后台代码

    很多情况下,我们都需要从Excel中获取数据来创建Word报表文档.首先在Excel中分析数据,然后将分析结果导出到Word文档中发布.技术实现方式:1.创建Word模板,用来作为数据分析结果发布平台 ...

  8. Java jxl导入excel文件,导入的数字、身份证号码、手机号变成了科学计数法,解决方案

    原文出自:https://blog.csdn.net/seesun2012 这是一个execl文件导入数据库操作,使用jxl解析execl导入数据库过程出现了科学计数法,与想要导入的数据不匹配,以下是 ...

  9. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

随机推荐

  1. Java反射获取class对象的三种方式,反射创建对象的两种方式

    Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

  2. linux下的mongodb数据库原生操作

    mongodb,是一种结构最像mysql的nosql mysql中的数据库,mongodb中也有,区别在于, myql中数据库下的是表,字段和数据的形式存在 mongodb数据库下的是叫集合(和pyt ...

  3. Java代码模拟http请求的两种方式

    z这里用百度地图的逆地理编码接口为例, 第一种方式:(通过jdk中的java.net包) 引入工具类 import java.net.URL; import java.net.URLConnectio ...

  4. Locally managed (LMT) vs. Dictionary managed (DMT) tablespace

    The LMT is implemented by adding the extent management local clause to the tablespace definition syn ...

  5. hdu 3555数位dp基础入门题

    #include<stdio.h> #define N 20 long long  dp[N][3]; void init(){ long long  i; dp[0][0]=1; for ...

  6. 3.2 re--正則表達式操作(Regular expression operations)

    本模块提供了正則表達式的匹配操作,它的功能跟Perl语言里的功能一样. 不管是Unicode字符串还是单字节8位组成的字符串,都能够使用模式匹配和字符串查找的功能. 只是要注意的是Unicode字符串 ...

  7. 基于SpringMVC+SpringJDBC的用户管理系统(增删查改)

    鉴于MyBatis暂时不会用,所以用刚学的SpringJDBC代替,也很简洁.以下贴出几个重要的代码. 1.UserDaoImpl数据库操作实现类 package com.wxy.dao.impl; ...

  8. scanf,printf函数细节

    今天笔试的时候遇到一个考察C语言scanf函数的题目 int x; float y; scanf("%3d%f",&x,&y); // input 123456 6 ...

  9. 黑马day01 笔记

    一.xml语法   1.文档声明     用来声明xml的基本属性,用来指挥解析引擎怎样去解析当前xml     通常一个xml都要包括而且仅仅能包括一个文档声明     xml的文档必须在整个xml ...

  10. luogu1969 积木大赛

    题目大意 搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成n块高度为 0 的积木).接下来每次操作,可以选择一段连 ...