首先引入相关依赖

 <!--解析office相关文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--解析office相关文件-->

工具类


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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile; import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map; public class OfficeUtils { protected static final Logger logger = LoggerFactory.getLogger(OfficeUtils.class); public static Map<Integer, Map<Integer, Object>> readExcelContentz(MultipartFile file) throws Exception {
Map<Integer, Map<Integer, Object>> content = new HashMap<Integer, Map<Integer, Object>>();
// 上传文件名
Workbook wb = getWb(file);
if (wb == null) {
throw new BusinessException(ErrorType.WORK_BOOK_EMPTY);
}
Sheet sheet = wb.getSheetAt(0);
// 得到总行数
int rowNum = sheet.getLastRowNum();
Row row = sheet.getRow(0);
int colNum = row.getPhysicalNumberOfCells();
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
int j = 0;
Map<Integer, Object> cellValue = new HashMap<Integer, Object>();
while (j < colNum) {
Object obj = getCellFormatValue(row.getCell(j));
cellValue.put(j, obj);
j++;
}
content.put(i, cellValue); }
return content;
} //根据Cell类型设置数据
private static Object getCellFormatValue(Cell cell) {
Object cellvalue = "";
if (cell != null) {
switch (cell.getCellTypeEnum()) {
case NUMERIC:
cellvalue = String.valueOf(cell.getNumericCellValue());
break;
case FORMULA: {
cellvalue = cell.getDateCellValue();
break;
}
case STRING:
cellvalue = cell.getRichStringCellValue().getString();
break;
default:
cellvalue = "";
}
} else {
cellvalue = "";
}
return cellvalue;
} private static Workbook getWb(MultipartFile mf) {
String filepath = mf.getOriginalFilename();
String ext = filepath.substring(filepath.lastIndexOf("."));
Workbook wb = null;
try {
InputStream is = mf.getInputStream();
if (".xls".equals(ext)) {
wb = new HSSFWorkbook(is);
} else if (".xlsx".equals(ext)) {
wb = new XSSFWorkbook(is);
} else {
wb = null;
}
} catch (FileNotFoundException e) {
logger.error("FileNotFoundException", e);
} catch (IOException e) {
logger.error("IOException", e);
}
return wb;
}
}
 

service层

public Map<Integer, Map<Integer,Object>> addCustomerInfo(MultipartFile file) {
Map<Integer, Map<Integer,Object>> map = new HashMap<>();
try {
map = ReadExcelUtil.readExcelContentz(file);
} catch (Exception e) {
e.printStackTrace();
}
//excel数据存在map里,map.get(0).get(0)为excel第1行第1列的值,此处可对数据进行处理
}

controller层

@PostMapping
public String add(@RequestParam("file")MultipartFile file){
Map<Integer, Map<Integer,Object>> map = customerService.addCustomerInfo(file);
return "success";
}

至此,基本完成Excel的解析。

最新文章

  1. java比较两个对象是否相等的方法
  2. Node-webkit 资料笔记
  3. jquery使用淘宝接口跨域查询手机号码归属地实例
  4. [转]Multiple outputs from T4 made easy
  5. (转)android ListView详解
  6. MyEclipse设置默认的目光格式
  7. 动态规划&mdash;&mdash;数字三角形(递归or递推or记忆化搜索)
  8. 错误解决一_call time pass-by-reference removed
  9. String,StringBuffer与StringBuilder差异??
  10. sublime text 配置文件中文说明
  11. jsp分页的不同实现方法
  12. js原生设计模式——7原型模式之new+call(this)组合应用再探讨实例
  13. Eclipse插件ObjectAid(UML画图工具)
  14. [原创]嵌入CEF遇到的问题及解决方案
  15. Spring配置中&lt;context:annotation-config&gt; VS &lt;context:component-scan&gt;
  16. 二次剩余 Cipolla算法
  17. Marriage Match III HDU - 3277(二分权值 + 拆点 建边)
  18. [JOISC2014]友だちをつくろう
  19. 运行Docker镜像
  20. AngularJS 、Backbone.js 和 Ember.js 的比较

热门文章

  1. 【夯实基础】- Java中的fail-fast机制
  2. 关于justify-content属性的再学习(区分三个属性)
  3. Vue.js详解
  4. Android为TV端助力记录EditText.setInputType的坑
  5. 什么是SAP Intelligent Robitic Process Automation - iRPA
  6. SAP成都研究院的小伙伴们庆祝公司再次获得2019年最佳雇主的场景
  7. Linux安装和配置MySQL5.7【修改密码、修改字符集等配置】(5.7.18+版本也可参考,我是5.7.22)
  8. Github 上 36 个最实用的 Vue 开源库
  9. Pyspark中遇到的 java.io.IOException: Not a file 和 pyspark.sql.utils.AnalysisException: &#39;Table or view not found
  10. C语言中指针是什么?