1. 程式人生 > >使用poi實現Excel匯入功能,資料庫基於oracle(上)

使用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的匯入資料的插入實現等有時間了,再一併寫給大家,當然如果大家有興趣也可以留言給我,我會盡快回復大家。