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

首先说下采用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的导入数据的插入实现等有时间了,再一并写给大家,当然如果大家有兴趣也可以留言给我,我会尽快回复大家。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值