1. 程式人生 > >spring+struts2+mybatis中poi導入excel數據

spring+struts2+mybatis中poi導入excel數據

href rst var dao operation chan ide ffi ram

1、html

<td class="queryTdRight" style="width:22%;">&nbsp;&nbsp;交易年度:
  <input id="dealYear" name="dealYear" style="width: 140px"/>
                   </td>
                   <td class="queryTdRight" style="width:40%;">
                       請選擇文件導入:
                       
<input class="easyui-filebox" style="width:75%" name="uploadExcel" id="uploadExcel" data-options="onChange:function(){},prompt:‘選擇文件‘,accept:‘application/vnd.ms-excel application/x-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet‘"/> </td> <
td align="left" style="padding-left:5px;"> <a href="javascript:uploadExcel()" class="easyui-linkbutton" data-options="iconCls:‘icon-upload‘">&nbsp;</a> <a href="javascript:matching()" class="easyui-linkbutton" data-options="iconCls:‘icon-goto‘"
>&nbsp;</a> <a href="javascript:saveUploadExcel()" class="easyui-linkbutton" data-options="iconCls:‘icon-download‘">&nbsp;</a> <a href="javascript:deleteData()" class="easyui-linkbutton" data-options="iconCls:‘icon-cancel‘">&nbsp;</a> <a href="javascript:initTable(0)" class="easyui-linkbutton" data-options="iconCls:‘icon-search‘">&nbsp;</a> </td>

2、js

/**
 * 上傳按鈕
 * 
 */
function uploadExcel(){    
    //得到上傳文件的全路徑  
     var fileName= $(‘#uploadExcel‘).filebox(‘getText‘); 
     if(fileName==""){     
        $.messager.alert(‘提示‘,‘請選擇上傳文件!‘,‘info‘);   
        return;
    }
    $.messager.progress({title:‘提示‘,msg:‘正在校驗,請稍候...‘});
     $.ajax({
        url: basePath+"/demandForecast/selectTempData.action",
        data: "",
        type: "post",
        cache: false,
        dataType: "json",
        success: function (data) {
            $.messager.progress("close");
            var d=data.resultData;
            if(d.length>0){
                $.messager.confirm(‘提示‘, ‘數據已經存在,是否要覆蓋?‘, function(r){
                    if (r){
                        importExcel(fileName);
                    }
                });
            }else{
                importExcel(fileName);
            }
        },
        error: function (error) {
            
        },
        complete: function () { 
            
        }
    });
}

/**
 * 導入文件上傳
 */
function importExcel(fileName){
     var dealYear= $(‘#dealYear‘).combobox(‘getValue‘);  
   
      if(dealYear !=""){   
         //進行基本校驗  
          //debugger;
         if(fileName==""){     
            $.messager.alert(‘提示‘,‘請選擇上傳文件!‘,‘info‘);   
         }else{  
            //對文件格式進行校驗  
            var f_content = fileName;  
            var fileext=f_content.substring(f_content.lastIndexOf("."),f_content.length);
            fileext=fileext.toLowerCase();
            //fileName=encodeURI(fileName);
            if (fileext==‘.xls‘ || fileext==‘.xlsx‘){  
                /*異步提交*/
                $.messager.progress({title:‘提示‘,msg:‘正在上傳文件,請稍候...‘});
                $("#questionTypesManage").ajaxSubmit({
                    url:basePath+"/demandForecast/importToTemp.action?dealYear="+encodeURI(encodeURI(dealYear)),
                    dataType:"text/html",  
                    type:‘post‘,
                    clearForm:false, 
                    complete:function(data){
                        $.messager.progress("close");
                        data=""+data.responseText;
                        var sd=data.split("\"");
                        $.messager.alert(‘提示‘,sd[1],‘info‘, function() {
                            initTable();
                        });
                    }
                });
            }else{  
                $.messager.alert(‘提示‘,‘請選擇xls/xlsx格式文件!‘,‘info‘);   
                $(‘#uploadExcel‘).filebox(‘setValue‘,‘‘);   
            }  
         }    
  }else{    
      $.messager.alert(‘提示‘,‘請選擇日期!‘,‘info‘);   
  }
}

3、struts xml

<action name="importToTemp" class="com.icss.action.demandForecast.DemandForecastAction" method="importToTemp">
            <result name="importResult" type="json">
                <param name="contentType">
                    text/html
                </param>
                <param name="root">mark</param>
            </result>
        </action>

4、action

public String importToTemp(){
        try { 
            demandForecastService.saveMonthSalePlanImportTemp(new FileInputStream(uploadExcel),dealYear);
            mark="上傳成功"; 
            operationLogService.saveLog(ConstantConfig.DEMAND_FORECAST_IMPORT_CODE, ConstantConfig.DEMAND_FORECAST_IMPORT_NAME, "[電腦][上傳][成功]");
        } catch (Exception e) { 
            e.printStackTrace(); 
            mark="上傳失敗,模板數據不規範"; 
            try {
                operationLogService.saveLog(ConstantConfig.DEMAND_FORECAST_IMPORT_CODE, ConstantConfig.DEMAND_FORECAST_IMPORT_NAME, "[電腦][上傳][失敗]["+e.getMessage()+"]");
            } catch (Exception e1) {
                e1.printStackTrace();
                
            }
        } 
        
        return "importResult";
    }

5、service

@Override
    public void saveMonthSalePlanImportTemp(FileInputStream is,
            String dealYear) throws Exception {
        
        //先清空臨時表
        String condition="1=1";
        baseDao.delete("WP_DEMAND_FORECAST_IMPORT_TEMP", condition);
        
        Workbook wb = WorkbookFactory.create(is);  
        Sheet sheet = wb.getSheetAt(0);//獲取工作簿

        DemandForecastImportTemp demandForecastImportTemp=null;
        
        for (int i = 0,rowNum = sheet.getLastRowNum(); i < rowNum; i++) {//叠代行
            demandForecastImportTemp = new DemandForecastImportTemp();
            Row row = sheet.getRow(i+1);//獲取工作簿中的行(不取第一行)
            boolean isLasttextRow = false;//是否最後一行
            for (int j = 0,cellNum = row.getLastCellNum(); j < cellNum; j++) {//叠代列
                Cell cell = row.getCell(j);//取得列中的值
                if (cell == null) {
                    break;
                }
                String cellValue = dataType(cell);
                
                if (j == 0 && StringUtils.isEmpty(cellValue)) {
                    isLasttextRow = true;
                    break;
                }
                setData(demandForecastImportTemp, cellValue, j, dealYear);
            }
            if (isLasttextRow) {
                break;
            }
            //保存數據
            demandForecastImportTemp.setDealYear(dealYear);
            this.save(demandForecastImportTemp);
        }
    }
    
    private void save(DemandForecastImportTemp demandForecastImportTemp) {
        ArrayList<String> columns=new ArrayList<String>();
        ArrayList<Object> values=new ArrayList<Object>();
        columns.add("ORG_ID");
        values.add(demandForecastImportTemp.getOrgId());
        columns.add("ORG_NAME");
        values.add(demandForecastImportTemp.getOrgName());
        columns.add("IND_ID");
        values.add(demandForecastImportTemp.getIndId());
        columns.add("IND_NAME");
        values.add(demandForecastImportTemp.getIndName());
        columns.add("CIG_CODE");
        values.add(demandForecastImportTemp.getCigCode());
        columns.add("CIG_NAME");
        values.add(demandForecastImportTemp.getCigName());
        columns.add("CIG_CLASS");
        values.add(demandForecastImportTemp.getCigClass());
        columns.add("CIG_PRICE");
        values.add(demandForecastImportTemp.getCigPrice());
        columns.add("YEAR_DEMAND");
        values.add(demandForecastImportTemp.getYearDemand());
        columns.add("PRE_HALFYEAR_STORE");
        values.add(demandForecastImportTemp.getPreHalfyearStore());
        columns.add("HALFYEAR_DEMAND_FORECAST");
        values.add(demandForecastImportTemp.getHalfyearDemandForecast());
        columns.add("YEAR_END_STORE");
        values.add(demandForecastImportTemp.getYearEndStore());
        columns.add("NEXT_HALFYEAR_DEMAND");
        values.add(demandForecastImportTemp.getNextHalfyearDemand());
        columns.add("NEXT_HALFYEAR_AUDIT_DEMAND");
        values.add(demandForecastImportTemp.getNextHalfyearAuditDemand());
        columns.add("CHECK_STATUS");
        values.add(demandForecastImportTemp.getCheckStatus());
        columns.add("DEAL_YEAR");
        values.add(demandForecastImportTemp.getDealYear());
        
        baseDao.insert("WP_DEMAND_FORECAST_IMPORT_TEMP", columns, values);
    }

        //判斷excel單元格內容的格式,並對其進行轉換,以便插入數據庫
        private final String dataType(Cell cell){
            switch (cell.getCellType()) {
                case 0:
                    return String.valueOf(cell.getNumericCellValue());
                case 1:
                    return cell.getStringCellValue();
                case 2:
                    return String.valueOf(cell.getDateCellValue());
                case 4:
                    return String.valueOf(cell.getBooleanCellValue());
                case 5:
                    return String.valueOf(cell.getErrorCellValue());
            }
            return "";
        }
        
        private final void setData(DemandForecastImportTemp demandForecastImportTemp,
                String cellValue,int j,String dealYear){
            if (j == 0) {
                demandForecastImportTemp.setOrgName(cellValue);
            } else if (j == 1) {
                demandForecastImportTemp.setCigName(cellValue);
            } else if (j == 2) {
                demandForecastImportTemp.setCigCode(cellValue);
            } else if (j == 3) {
                demandForecastImportTemp.setIndName(cellValue);
            } else if (j == 4) {
                double cigClass = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setCigClass(cigClass);
            } else if (j == 5) {
                double cigPrice = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setCigPrice(cigPrice);
            } else if (j == 6) {
                double yearDemand = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setYearDemand(yearDemand);
            } else if (j == 7) {
                double preHalfyearStore = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setPreHalfyearStore(preHalfyearStore);
            } else if (j == 8) {
                double halfyearDemandForecast = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setHalfyearDemandForecast(halfyearDemandForecast);
            } else if (j == 9) {
                double yearEndStore = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setYearEndStore(yearEndStore);
            } else if (j == 10) {
                double nextHalfyearDemand = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setNextHalfyearDemand(nextHalfyearDemand);
            }else if (j == 11) {
                double nextHalfyearAuditDemand = Double.valueOf(StringUtils.isEmpty(cellValue) ? "0" : cellValue);
                demandForecastImportTemp.setNextHalfyearAuditDemand(nextHalfyearAuditDemand);
            }
            demandForecastImportTemp.setDealYear(dealYear);
            demandForecastImportTemp.setCheckStatus(0);
        }

spring+struts2+mybatis中poi導入excel數據