1.前端
<form action="/xlsx/upload" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
2.工具类
package com.ju.utils;
import java.io.InputStream;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
/**
* 读取Excel
*
* @author zengwendong
*/
public class ReadExcelUtils {
/**
*
* 根据Cell类型设置数据
* @param cell
* @return
* @author zengwendong
*/
private static Object getCellFormatValue(Cell cell) {
Object cellvalue = "";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERIC
case Cell.CELL_TYPE_FORMULA: {
// 判断当前的cell是否为Date
if (DateUtil.isCellDateFormatted(cell)) {
// 如果是Date类型则,转化为Data格式
Date date = cell.getDateCellValue();
cellvalue = date;
} else {// 如果是纯数字
// 取得当前Cell的数值
cellvalue = cell.getNumericCellValue();
}
break;
}
case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING
// 取得当前的Cell字符串
cellvalue = cell.getRichStringCellValue().getString();
break;
default:// 默认的Cell值
cellvalue = "";
}
} else {
cellvalue = "";
}
return cellvalue;
}
public static List<Map<String,Object>> getData(MultipartFile file){
Workbook wb = null;
//获取后缀名
String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
try {
InputStream is = file.getInputStream();
if(".xls".equals(ext)){
wb = new HSSFWorkbook(is);
}else if(".xlsx".equals(ext)){
wb = new XSSFWorkbook(is);
}else{
wb=null;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
//获取第一个sheet
Sheet sheetOne = wb.getSheetAt(0);
//获取第一行数据(主要包含字段名称)
Row rowOne = sheetOne.getRow(0);
// 标题总列数
int colNum = rowOne.getLastCellNum();
// 得到总行数
int rowNum = sheetOne.getLastRowNum();
List<Map<String,Object>> list = new ArrayList<>();
for (int i = 1; i < rowNum ; i++) {
//获得当前遍历行的行数据
Row thisrow = sheetOne.getRow(i);
Map<String,Object> map = new HashMap<>();
for (int j = 0; j < colNum ; j++) {
//key为第一行的标题内容
map.put(rowOne.getCell(j).getStringCellValue(),getCellFormatValue(thisrow.getCell(j)));
}
list.add(map);
}
return list;
}
}
3.实例
响应数据为 List<Map<String,Object>> mapkey为字段名 value 为值