您的位置:首页 > 数据库 > Oracle

使用poi实现Excel导入功能,数据库基于oracle(上)

2017-06-19 23:58 696 查看
首先说下采用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的导入数据的插入实现等有时间了,再一并写给大家,当然如果大家有兴趣也可以留言给我,我会尽快回复大家。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: