版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27361727/article/details/73478356
首先说下采用poi实现导入Excel的实现思路(如果有更好的思路,欢迎跟我探讨。)
1、首先是JSP的编写:
<div class="span55"
style="width:330px; height:250px; overflow:scroll;">
<form:form enctype="multipart/form-data" id="batchUpload" method="post" action="${ctx}/npbi/outUrmHead/importExcel" class="form-horizontal">
<button class="btn btn-success btn-xs" id="uploadEventBtn" style="height:26px;" type="button">选择文件</button>
<input type="file" name="myfile" style="width:0px;height:0px;" id="uploadEventFile">
<input style="border:1px solid #e6e6e6;width:200px;height:26px;" id="uploadEventPath" disabled="disabled" type="text" placeholder="请选择Excel表">
</form:form>
<button type="button" class="btn btn-success btn-sm" onclick="outUrmList.uploadBtn();">上传</button>
</div>
<script type="text/javascript">
var OutUrmList = function(){
this.init = function(){
//模拟上传Excel
$("#uploadEventBtn").unbind("click").bind("click",function(){
$("#uploadEventFile").click();
});
$("#uploadEventFile").bind("change",function(){
$("#uploadEventPath").attr("value",$("#uploadEventFile").val());
})
};
//点击上传按钮
this.uploadBtn = function(){
var uploadEventFile = $("#uploadEventFile").val();
if(uploadEventFile==""){
alert("请选择Excel文件,再上传!");
}else if(uploadEventFile.lastIndexOf(".xls")<0 && uploadEventFile.lastIndexOf(".xlsx")<0){//可判断以.xls和.xlsx结尾的Excel
alert("只能上传Excel文件!");
}
else{
var Mid = $("#Mid").val();
var biaoshi = $("#biaoshi").val();
var url =ctx+"/npbi/outUrmHead/importExcel?Mid="+Mid+"&biaoshi="+biaoshi;
var formData = new FormData($('#batchUpload')[0]);
outUrmList.sendAjaxRequest(url,'POST',formData);
}
};
this.sendAjaxRequest = function(url,type,data){
$.ajax({
url:url,
type:type,
data:data,
success:function(result){
alert(result+"("+"提示:如系统异常关闭或页面刷新,请重新上传和申报!"+")");
},
error:function(){
alert("上传失败!");
},
cache:false,
contentType : false,
processData:false,
});
};
}
var outUrmList;
$(function(){
outUrmList = new OutUrmList();
outUrmList.init();
});
</script>`
这里没有提供一个模板的下载功能,实在是没时间去弄,有实现的可以给我借鉴一下。注意 <input type="file" name="myfile" ...这个地方的type要是file。切记form的类型要是:enctype="multipart/form-data"。
2、其次是service实现
String result = "";
String ieMode = "";
boolean flag = true;
boolean flags = true;
Map<String,Object> paramMap = new HashMap<String, Object>();
paramMap.put("ieMode", ieMode);
StringBuffer sb = new StringBuffer();
//创建处理EXCEL的类
ReadExcel readExcel = new ReadExcel();
//解析excel,获取上传的事件单
List<OutUrmList> urmList = readExcel.getExcelInfo(myFile,Mid);
if(urmList!=null&&!urmList.isEmpty()){
//判断Excel导入的编号是否已经存在于数据库中
for(int i=0;i<urmList.size();i++){
paramMap.put("billNoVal", urmList.get(i).getFormNo());
paramMap.put("Mid", Mid);
String billNo = outUrmListService.getbillNoDuplicationCheck(paramMap);
if(StringUtils.isNotEmpty(billNo)){
sb.append(billNo+",");
flags = false;
}
}
//判断Excel导入的编号号是否之间是否存在相同
for(int j=0;j<urmList.size()-1;j++){
for(int r=j+1;r<urmList.size();r++){
if((urmList.get(j).getFormNo()).equals(urmList.get(r).getFormNo())){
flag = false;
}
}
}
if(flag && flags){
outUrmListService.saveExcelInfo(urmList);
result="上传成功!";
}else if(!flag){
result="Excel文件中编号重复,请核实后再上传!!";
}else if(!flags){
result="已存在编号:"+"("+sb+")"+"请核实后再上传!";
}
}else{
result="上传失败!";
}
return result;
}```
这里对插入的Excel内容到数据库已经存在的唯一性校验实现。
3、Controller的实现:
@RequestMapping(value = "importExcel", method = RequestMethod.POST)
@ResponseBody
public void importExcel(HttpServletRequest request, HttpServletResponse response,Model model,
@RequestParam("myfile") MultipartFile myFile) throws ParseException, IOException {
System.out.println("=========================>进来");
String result =outUrmHeadService.readExcelFile(myFile);
response.getWriter().print(result);
}```
这个value里面的 值主要对应了前台ajax的url,主要看你项目路径是如何配置了。@RequestParam(“myfile”) MultipartFile myFile中的“myfile”,对应你JSP的form里面的name=”myfile” 。
暂时先写到这里,还有导入的具体实现类ReadExcel.java以及基于Oracle的导入数据的插入实现等有时间了,再一并写给大家,当然如果大家有兴趣也可以留言给我,我会尽快回复大家。