首先,如果导入.xls的Excell,可以直接调用new ExcelRead().readExcel(file)方法,将Excell转成list;而如果是.xlsx的Excell,该方法就不可用了,为什么不可用,我在这就不多说了。现在直接上代码,以视说明:
前端页面<form id="queryForm" method="post">上传文件:</div><input id="file" type="file" name="file"><input type="button" οnclick="doSaveExcell()" value="确 定" style="margin-top:5px;" /></form>
说明:这里用的不是submit提交,如果要submit提交,应在form中加入enctype="multipart/form-data" action="xx/xx.do"
function doSaveExcell(){
var form = new FormData(document.getElementById("queryForm"));
$.ajax({
url:"/xx/xx.do",
type : "POST",
data:form,
cache: false,
processData:false,
contentType:false,
async: false,
success : function(data){
}
});
}
先说导入.xls的Excell:
1.在后台接收file@RequestParam(value = "file", required = false) MultipartFile file
2.将Excell转成list:List<ArrayList<String>> list = new ExcelRead().readExcel(file);
再说导入.xlsx的Excell:
1.将file文件存入服务器,并生成路径filepath
2.将xlsx文件解析出来并转成集合
public List<Map<String, Object>> doXlsxleading(String filepath){
List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = null;
try {
//这个filepath的生成路径,可以在控制层现将其文件暂时存入服务器,然后再将其删除
xwb = new XSSFWorkbook(new FileInputStream(filepath));
} catch (IOException e) {
return resultList;
}
// 读取第一章表格内容
XSSFSheet sheet = xwb.getSheetAt(0);
xwb.getSheetAt(1);
// 定义 row、cell
XSSFRow row;
String cell;
// 循环输出表格中的内容
for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
Map<String, Object> resultMap = new HashMap<String, Object>();
for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {
// 通过 row.getCell(j).toString() 获取单元格内容,
cell = row.getCell(j).toString();
resultMap.put("cell"+j, cell);
}
resultList.add(resultMap);
}
//将临时生成filepath的文件删除
File file = new File(filepath);
if (file.exists() && file.isFile()) {
file.delete();
}
return resultList;
}
3.调用doXlsxleading(String filepath)方法,生成list