zoukankan      html  css  js  c++  java
  • excel导入

    控制器:

    /**
    * @Description: 处理导入excel空单元格数据
    * @param @param list
    * @param @param index
    * @param @return
    * @return Object
    * @throws
    * @author hougm
    * @date 2017-9-18
    */
    @SuppressWarnings("rawtypes")
    private Object getListItem(List list,int index){
    if(list.size()>index){
    return list.get(index);
    }else{
    return null;
    }
    }

    /**
    * @Description: 上传excel(批量处理还款计划)
    * @param @param file
    * @param @param request
    * @param @param response
    * @param @param isValidate
    * @return void
    * @throws
    * @author hougm
    * @date 2017-8-16
    */
    @SuppressWarnings("unchecked")
    @RequestMapping("/toImportBatchLoanRepayPlan")
    @ResponseBody
    public Object toImportBatchLoanRepayPlan(@RequestParam(required=false) MultipartFile[] file,HttpServletRequest request,String isValidate,String channel){
    try {
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
    MultipartFile resFile = null;
    for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
    resFile = entity.getValue();
    List<List<Object>> list=new ArrayList<List<Object>>();
    try {
    list = ExcelUtils.read2007Excel(resFile.getInputStream(),1,false);
    } catch (Exception e) {
    e.printStackTrace();
    logger.error(e.getMessage());
    JSONObject json=new JSONObject();
    json.put("message", "您上上传的excel文件不对,请核实你上传的文件为excel2007及以上");
    json.put("succ",true);
    return json;
    }
    List<FinancialBatchLoanPlanRecordError> errorList=new ArrayList<FinancialBatchLoanPlanRecordError>();
    Map<String,FinancialBatchLoanPlanRecordError> errorMap=new HashMap<String,FinancialBatchLoanPlanRecordError>();
    List<FinancialBatchLoanPlanRecordSucc> succList=new ArrayList<FinancialBatchLoanPlanRecordSucc>();
    SimpleDateFormat format_1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String pcNo=this.getBatchNo();//生成批次号
    for(int i=0;i<list.size();i++){
    if(list.get(i)==null||list.get(i).size()<3){
    continue;
    }
    System.out.println("列表第"+(i+1)+"行数据:"+list.get(i));
    Map<String, Object> params=new HashMap<String,Object>();
    params.put("channel", channel);

    boolean isVali=true;
    StringBuffer errorStr=new StringBuffer();
    FinancialBatchLoanPlanRecordError errorRecord=new FinancialBatchLoanPlanRecordError();
    FinancialBatchLoanPlanRecordSucc succRecord=new FinancialBatchLoanPlanRecordSucc();

    errorRecord.setChannel(channel);
    succRecord.setChannel(channel);
    errorRecord.setBathcNo(pcNo);
    succRecord.setBathcNo(pcNo);
    /**借款编号**/
    String loanNo=(String) getListItem(list.get(i),0);
    if(StringUtils.isEmpty(loanNo)){
    isVali=false;
    errorStr.append("借款编号不能为空;");
    // continue;
    }else {
    params.put("loanNo", loanNo);
    errorRecord.setLoanNo(loanNo);
    succRecord.setLoanNo(loanNo);
    }
    /**客户姓名**/
    String realName=(String) getListItem(list.get(i),1);
    if(StringUtils.isEmpty(realName)){
    errorStr.append("客户姓名不能为空;");
    }else {
    // params.put("realName", realName);
    errorRecord.setRealName(realName);
    succRecord.setRealName(realName);
    }
    /**借款人ID**/
    String userId=(String) getListItem(list.get(i),2);
    if(StringUtils.isEmpty(userId)){
    errorStr.append("借款人ID不能为空;");
    }else {
    // params.put("userId", userId);
    try {
    errorRecord.setUserId(Long.parseLong(userId));
    succRecord.setUserId(Long.parseLong(userId));
    } catch (NumberFormatException e) {
    e.printStackTrace();
    errorStr.append("借款人ID必须是数字;");
    }
    }
    /**分期数**/
    String stepNo=(String) getListItem(list.get(i),3);
    if(StringUtils.isEmpty(stepNo)){
    isVali=false;
    errorStr.append("分期数不能为空;");
    }else {
    params.put("stepNo", stepNo);
    try {
    String stepNos[]=stepNo.split("/");
    if(stepNos.length==2){
    errorRecord.setStepNo(Integer.parseInt(stepNos[0]));
    succRecord.setStepNo(Integer.parseInt(stepNos[0]));
    }else {
    errorStr.append("分期数格式不对,必须是如:1/3;");
    isVali=false;
    }
    } catch (Exception e) {
    e.printStackTrace();
    isVali=false;
    errorStr.append("分期数必须是数字;");
    }
    }
    /**减免金额**/
    String REDUCE_AMOUNT=(String) getListItem(list.get(i),4);
    if(!StringUtils.isEmpty(REDUCE_AMOUNT)){
    try {
    BigDecimal BIG_REDUCE_AMOUNT=new BigDecimal(REDUCE_AMOUNT);
    if(BIG_REDUCE_AMOUNT.compareTo(new BigDecimal(0))<0){
    errorStr.append("减免滞纳金错误;");
    }else {
    errorRecord.setReduceAmount(BIG_REDUCE_AMOUNT);
    succRecord.setReduceAmount(BIG_REDUCE_AMOUNT);
    }
    } catch (Exception e) {
    e.printStackTrace();
    errorStr.append("减免滞纳金格式错误;");
    }
    }
    /**实收合计**/
    String ACT_TOTAL_AMOUNT=(String) getListItem(list.get(i),5);
    if(!StringUtils.isEmpty(ACT_TOTAL_AMOUNT)){
    try {
    BigDecimal BIG_ACT_TOTAL_AMOUNT=new BigDecimal(ACT_TOTAL_AMOUNT);
    if(BIG_ACT_TOTAL_AMOUNT.compareTo(new BigDecimal(0))<0){
    errorStr.append("实收合计错误;");
    }else {
    errorRecord.setActTotalAmount(BIG_ACT_TOTAL_AMOUNT);
    succRecord.setActTotalAmount(BIG_ACT_TOTAL_AMOUNT);
    }
    } catch (Exception e) {
    e.printStackTrace();
    errorStr.append("实收合计格式错误;");
    }
    }else{
    errorStr.append("实收合计不能为空;");
    }
    /**实还日期**/
    String ACT_TIME=(String) getListItem(list.get(i),6);
    if(!StringUtils.isEmpty(ACT_TIME)){
    try {
    errorRecord.setActTime(format_1.parse(ACT_TIME));
    succRecord.setActTime(format_1.parse(ACT_TIME));
    } catch (ParseException e) {
    e.printStackTrace();
    errorStr.append("实还日期格式错误;");
    }
    }else{
    errorStr.append("实换日期不能为空;");
    }
    /**备注**/
    String REMARK=(String) getListItem(list.get(i),7);
    if(!StringUtils.isEmpty(REMARK)){
    if(REMARK.length()>150){
    errorStr.append("备注最多150个字;");
    }else {
    errorRecord.setRemark(REMARK);
    succRecord.setRemark(REMARK);
    }
    }else {
    errorStr.append("备注不能为空;");
    }
    /******用借款编号,分期数,channel匹配对应还款计划******/
    //假如参数本身没有问题(excel有值),具备数据库匹配条件那么匹配数据库还款计划数据
    if(isVali){
    List<Map<String, Object>> lrpList=this.loanRepayPlanService.queryLoanRepayPlanList(params,errorRecord.getActTime());
    if(lrpList!=null&&lrpList.size()>0){
    Map<String, Object> loanInfoMap=lrpList.get(0);
    if(loanInfoMap.get("ID")==null||!((Long)loanInfoMap.get("ID")).equals(errorRecord.getUserId())){
    errorStr.append("借款人ID和借款编号对应的还款计划的借款人ID不匹配;");
    }
    if(loanInfoMap.get("REAL_NAME")==null||!errorRecord.getRealName().equals(((String)loanInfoMap.get("REAL_NAME")))){
    errorStr.append("客户姓名和借款编号对应的还款计划的客户姓名不匹配;");
    }
    if("002005002".equals((String)loanInfoMap.get("REPAY_STATUS"))){
    errorStr.append("匹配的还款计划已经还款;");
    }
    if(loanInfoMap.get("LOAN_TIME")!=null){
    // String loanTimeStr=DateUtils.formatDate("yyyy-MM-dd", (Date)loanInfoMap.get("LOAN_TIME"));
    // Date loanTime=DateUtils.stringToDate(loanTimeStr+" 00:00:00", "yyyy-MM-dd HH:mm:ss");
    Date loanTime=(Date)loanInfoMap.get("LOAN_TIME");
    if(errorRecord.getActTime().getTime()<loanTime.getTime()){
    errorStr.append("实还日期有误;");
    }
    }else{
    errorStr.append("匹配的还款计划没有放款时间;");
    }
    errorRecord.setPlanId(Long.parseLong(loanInfoMap.get("PLAN_ID")+""));
    succRecord.setPlanId(Long.parseLong(loanInfoMap.get("PLAN_ID")+""));

    errorRecord.setMobile((String) loanInfoMap.get("MOBILE"));
    errorRecord.setLoanDay((Long) loanInfoMap.get("LOAN_DAY")+"");
    errorRecord.setLoanAmount((BigDecimal) loanInfoMap.get("LOAN_AMOUNT"));
    errorRecord.setDueDay(DateUtils.stringToDate((String) loanInfoMap.get("DUE_DAY"), "yyyy-MM-dd"));
    try {
    errorRecord.setNomTotalAmount(new BigDecimal(loanInfoMap.get("NOM_TOTAL_AMOUNT")+""));
    } catch (ClassCastException e) {
    // TODO Auto-generated catch block
    errorRecord.setNomTotalAmount((BigDecimal)loanInfoMap.get("NOM_TOTAL_AMOUNT"));
    }

    /**
    * 实还服务费+实还滞纳金+实还利息+实还本金+活动减免+减免利息+减免服务费+减免滞纳金≥应还服务费+应还滞纳金+应还利息+应还本金 若不≥,
    * 不予上传,告知减免金额有误
    */
    BigDecimal actTotalAmount=new BigDecimal(0);
    if(errorRecord.getActTotalAmount()!=null){
    actTotalAmount=errorRecord.getActTotalAmount();
    }
    // if(errorRecord.getDiffDueInterest()!=null){
    // actTotalAmount=actTotalAmount.add(errorRecord.getDiffDueInterest());
    // }
    // if(errorRecord.getDiffDueServiceInterest()!=null){
    // actTotalAmount=actTotalAmount.add(errorRecord.getDiffDueServiceInterest());
    // }
    if(errorRecord.getReduceAmount()!=null){
    actTotalAmount=actTotalAmount.add(errorRecord.getReduceAmount());
    /*计算减免总额*/
    BigDecimal reduceAmount=(BigDecimal)loanInfoMap.get("toalReduceAmount");
    reduceAmount=reduceAmount.add(errorRecord.getReduceAmount());
    /**减免总金额不得大于应还利息、应还服务费、应还滞纳金之和**/
    BigDecimal toalReduceAmount=loanInfoMap.get("DUE_INTEREST")==null?new BigDecimal(0):(BigDecimal)loanInfoMap.get("DUE_INTEREST");
    toalReduceAmount=toalReduceAmount.add(loanInfoMap.get("DUE_SERVICE_INTEREST")==null?new BigDecimal(0):(BigDecimal)loanInfoMap.get("DUE_SERVICE_INTEREST"));
    toalReduceAmount=toalReduceAmount.add(loanInfoMap.get("overEueAmount")==null?new BigDecimal(0):(BigDecimal)loanInfoMap.get("overEueAmount"));
    // if(toalReduceAmount.compareTo(reduceAmount)<0){
    // errorStr.append("减免总金额不得大于应还利息、应还服务费、应还滞纳金之和;");
    // }
    }else {
    actTotalAmount.add((BigDecimal)loanInfoMap.get("toalReduceAmount"));
    }
    // if(actTotalAmount.compareTo(errorRecord.getNomTotalAmount())<0){
    // errorStr.append("减免金额有误;");
    // }
    errorRecord.setRepayStatusName((String) loanInfoMap.get("REPAY_STATUS_NAME"));
    errorRecord.setEarlyFlag(loanInfoMap.get("EARLY_FLAG")+"");
    errorRecord.setOverdueDay((long) loanInfoMap.get("OVERDUE_DAY")+"");
    }else {
    errorStr.append("根据借款编号和分期数未找到匹配还款计划;");
    }
    }
    if(errorStr.length()>0){
    errorRecord.setErrorStr(errorStr.toString());
    errorList.add(errorRecord);
    }
    succList.add(succRecord);
    errorMap.put(errorRecord.getPlanId()+"BAK",errorRecord);
    }
    Map<String, Object> jsonMap = new HashMap<String, Object>();// 定义map
    if(errorList.size()>0||"0".equals(isValidate)){
    this.financialBatchLoanPlanRecordService.insertFinancialBatchLoanPlanRecordErrorList(errorList);
    jsonMap.put("message","已经完成数据验证,其中"+errorList.size()+"条数据验证失败!");
    jsonMap.put("batchNo", pcNo);
    return JSONObject.fromObject(jsonMap);
    }else if("1".equals(isValidate)){
    /**保存验证成功的记录信息**/
    this.financialBatchLoanPlanRecordService.insertFinancialBatchLoanPlanRecordSuccList(succList);

    AdminInfo adminInfo = (AdminInfo) request.getSession().getAttribute(
    DtConstant.CurrentUserH);
    Map<String, Object> params=new HashMap<String,Object>();
    List<FinancialModifyLoanPlanRecordInfo> logInfoList=new ArrayList<FinancialModifyLoanPlanRecordInfo>();
    /**处理批量修改还款计划记录信息**/
    for (FinancialBatchLoanPlanRecordSucc recordSucc : succList) {
    params.clear();
    params.put("planId", recordSucc.getPlanId());
    params.put("DIFF_DUE_INTEREST", recordSucc.getDiffDueInterest()!=null?recordSucc.getDiffDueInterest().toString():null);
    params.put("DIFF_DUE_SERVICE_INTEREST", recordSucc.getDiffDueServiceInterest()!=null?recordSucc.getDiffDueServiceInterest().toString():null);
    params.put("DIFF_OVERDUE_AMOUNT", recordSucc.getReduceAmount()!=null?recordSucc.getReduceAmount().toString():null);
    params.put("REMARK", recordSucc.getRemark());

    /**获取修改还款计划以前的还款计划数据**/
    FinancialModifyLoanPlanRecordInfo record=this.financialModifyLoanPlanRecordServiceImpl.processFinancialModifyLoanPlanRecordInfoByOldInfo(adminInfo,params);
    record.setOperateType("1");
    record.setBatchNo(pcNo);
    record.setActTime(recordSucc.getActTime());
    logInfoList.add(record);
    }
    /**更新还款计划信息**/
    // this.loanRepayPlanService.updateModifyLoanRepayPlan(params,record);
    String responseContent=this.loanRepayPlanService.callBatchModifyLoanRepayPlan(succList,logInfoList);
    if(responseContent.indexOf("[")!=-1){
    JSONArray resJosnList=JSONArray.fromObject(responseContent);
    Iterator<JSONObject> jsonList=resJosnList.iterator();
    List<FinancialBatchLoanPlanRecordError> processErrorList=new ArrayList<FinancialBatchLoanPlanRecordError>();
    while (jsonList.hasNext()) {
    JSONObject resJson= (JSONObject) jsonList.next();
    if("succ".equals(resJson.get("code"))){
    for (FinancialModifyLoanPlanRecordInfo record : logInfoList) {
    /**插入还款计划日志信息**/
    this.financialModifyLoanPlanRecordServiceImpl.insertFinancialModifyLoanPlanRecordInfo(record);
    }
    }else{
    FinancialBatchLoanPlanRecordError errorRecord=errorMap.get(((JSONObject)resJson.get("reqData")).get("id")+"BAK");
    if(errorRecord==null){
    errorRecord=new FinancialBatchLoanPlanRecordError();
    errorRecord.setErrorStr((String) resJson.get("msg"));
    errorRecord.setLoanNo((String) resJson.get("loanNo"));
    errorRecord.setBathcNo(pcNo);
    }else{
    errorRecord.setErrorStr((String) resJson.get("msg"));
    processErrorList.add(errorRecord);
    }
    }
    }
    if(processErrorList.size()>0){
    this.financialBatchLoanPlanRecordService.insertFinancialBatchLoanPlanRecordErrorList(processErrorList);
    jsonMap.put("message", "共操作了"+logInfoList.size()+"条数据,其中"+resJosnList.size()+"条数据失败。");
    }else {
    jsonMap.put("message","已经完成数据验证并提交处理成功,处理"+logInfoList.size()+"条数据!");
    jsonMap.put("succ",true);
    }
    }else {
    JSONObject resJson=JSONObject.fromObject(responseContent);
    jsonMap.put("message", resJson.get("msg"));
    }
    jsonMap.put("batchNo", pcNo);
    return JSONObject.fromObject(jsonMap);
    }
    }
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    JSONObject jsonMap=new JSONObject();
    logger.error(e.getMessage());
    jsonMap.put("message","系统错误,请联系管理员:"+e.getMessage());
    jsonMap.put("succ",true);
    return jsonMap;
    }
    return null;
    }

    工具类:

    package com.ydly.utils;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.read.biff.BiffException;
    
    public class ExcelUtils {
        
        public static List<String[]> readExcel(InputStream stream) throws BiffException, IOException {
            // 创建一个list 用来存储读取的内容
            List<String[]> list = new ArrayList<String[]>();
            Workbook rwb = null;
            Cell cell = null;
            // 获取Excel文件对象
            rwb = Workbook.getWorkbook(stream);
            // 获取文件的指定工作表 默认的第一个
            Sheet sheet = rwb.getSheet(0);
            // 行数(表头的目录不需要,从1开始)
            for (int i = 0; i < sheet.getRows(); i++) {
                // 创建一个数组 用来存储每一列的值
                String[] str = new String[sheet.getColumns()];
                // 列数
                for (int j = 0; j < sheet.getColumns(); j++) {
                    // 获取第i行,第j列的值
                    cell = sheet.getCell(j, i);
                    str[j] = cell.getContents();
                }
                // 把刚获取的列存入list
                list.add(str);
            }
            return list;
        }
        
        /**
         * @Description: 读取2003excel
         * @param @param is
         * @param @param startIndex
         * @param @param processMergedRegion
         * @param @return
         * @param @throws IOException   
         * @return List<List<Object>>  
         * @throws
         * @author hougm
         * @date 2017-8-16
         */
        public static List<List<Object>> read2003Excel(InputStream is,int startIndex,boolean processMergedRegion)
                throws IOException {
            List<List<Object>> list = new LinkedList<List<Object>>();
            HSSFWorkbook hwb = new HSSFWorkbook(is);
            HSSFSheet sheet = hwb.getSheetAt(0);
            Object value = null;
            HSSFRow row = null;
            HSSFCell cell = null;
            int counter = 0;
    //        for (int i = sheet.getFirstRowNum(); counter < sheet
    //                .getPhysicalNumberOfRows(); i++) {
            for (int i = startIndex==0?sheet.getFirstRowNum():startIndex; counter < sheet
                    .getPhysicalNumberOfRows(); i++) {
                row = sheet.getRow(i);
                if (row == null) {
                    if(i<(50*sheet.getPhysicalNumberOfRows())){
                        continue;
                    }else{
                        break;
                    }
                } else {
                    counter++;
                }
                List<Object> linked = new LinkedList<Object>();
                for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
                    cell = row.getCell(j);
                    Map<String, Object> cellMap=isMergedRegion2003(sheet,i,j);
                    if((boolean) cellMap.get("isMergedRegion")&&processMergedRegion){
                        CellRangeAddress cellRangeAddress=(CellRangeAddress) cellMap.get("cellRangeAddress");
                        cell=sheet.getRow(cellRangeAddress.getFirstRow()).getCell(cellRangeAddress.getFirstColumn());
                        int lastColumn = cellRangeAddress.getLastColumn();
                        j=lastColumn;
                    }
                    if (cell == null) {
                        linked.add(null);
                        continue;
                    }
                    DecimalFormat df = new DecimalFormat("0");// 格式化 number String
                                                                // 字符
                    SimpleDateFormat sdf = new SimpleDateFormat(
                            "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
                    DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
                    switch (cell.getCellType()) {
                    case XSSFCell.CELL_TYPE_STRING:
                        System.out.println(i + "行" + j + " 列 is String type");
                        value = cell.getStringCellValue();
                        break;
                    case XSSFCell.CELL_TYPE_NUMERIC:
                        System.out.println(i + "行" + j
                                + " 列 is Number type ; DateFormt:"
                                + cell.getCellStyle().getDataFormatString());
                        if ("@".equals(cell.getCellStyle().getDataFormatString())) {
                            value = df.format(cell.getNumericCellValue());
                        } else if ("General".equals(cell.getCellStyle()
                                .getDataFormatString())) {
                            value = nf.format(cell.getNumericCellValue());
                        } else {
                            value = sdf.format(HSSFDateUtil.getJavaDate(cell
                                    .getNumericCellValue()));
                        }
                        break;
                    case XSSFCell.CELL_TYPE_BOOLEAN:
                        System.out.println(i + "行" + j + " 列 is Boolean type");
                        value = cell.getBooleanCellValue();
                        break;
                    case XSSFCell.CELL_TYPE_BLANK:
                        System.out.println(i + "行" + j + " 列 is Blank type");
                        value = "";
                        break;
                    default:
                        System.out.println(i + "行" + j + " 列 is default type");
                        value = cell.toString();
                    }
                    if (value == null || "".equals(value)) {
                        continue;
                    }
                    linked.add(value);
                }
                list.add(linked);
            }
            return list;
        }
        
        /**
         * @Description: 读取read2007Excel
         * @param @param is
         * @param @param startIndex
         * @param @param processMergedRegion
         * @param @return
         * @param @throws IOException   
         * @return List<List<Object>>  
         * @throws
         * @author hougm
         * @date 2017-8-16
         */
        public static List<List<Object>> read2007Excel(InputStream is,int startIndex,boolean processMergedRegion)
                throws IOException {
            List<List<Object>> list = new LinkedList<List<Object>>();
            // 构造 XSSFWorkbook 对象,strPath 传入文件路径
            XSSFWorkbook xwb = new XSSFWorkbook(is);
            // 读取第一章表格内容
            XSSFSheet sheet = xwb.getSheetAt(0);
            Object value = null;
            XSSFRow row = null;
            XSSFCell cell = null;
            int counter = 0;
    //        for (int i = sheet.getFirstRowNum(); counter < sheet
    //                .getPhysicalNumberOfRows(); i++) {
            for (int i = startIndex==0?sheet.getFirstRowNum():startIndex; counter < sheet
                    .getPhysicalNumberOfRows(); i++) {
                row = sheet.getRow(i);
                if (row == null) {
                    if(i<(50*sheet.getPhysicalNumberOfRows())){
                        continue;
                    }else{
                        break;
                    }
                } else {
                    counter++;
                }
                List<Object> linked = new LinkedList<Object>();
                for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
                    cell = row.getCell(j);
                    Map<String, Object> cellMap=isMergedRegion2007(sheet,i,j);
                    if((boolean) cellMap.get("isMergedRegion")&&processMergedRegion){
                        CellRangeAddress cellRangeAddress=(CellRangeAddress) cellMap.get("cellRangeAddress");
                        cell=sheet.getRow(cellRangeAddress.getFirstRow()).getCell(cellRangeAddress.getFirstColumn());
                        int lastColumn = cellRangeAddress.getLastColumn();
                        j=lastColumn;
                    }
                    if (cell == null) {
                        linked.add(null);
                        continue;
                    }
    //                DecimalFormat df = new DecimalFormat("0");// 格式化 number String
                                                                // 字符
    //                SimpleDateFormat sdf = new SimpleDateFormat(
    //                        "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
    //                DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
                    System.out.println(i + "行" + j + "列cell:"+cell);
                    switch (cell.getCellType()) {
                    case XSSFCell.CELL_TYPE_STRING:
                        System.out.println(i + "行" + j + " 列 is String type");
                        value = cell.getStringCellValue();
                        break;
                    case XSSFCell.CELL_TYPE_NUMERIC:
                        System.out.println(i + "行" + j
                                + "列 is Number type ; DateFormt:"
                                + cell.getCellStyle().getDataFormatString());
                        if ("@".equals(cell.getCellStyle().getDataFormatString())) {
                            value = String.valueOf(cell.getNumericCellValue());
                        } else if ("General".equals(cell.getCellStyle()
                                .getDataFormatString())) {
                            value = String.valueOf(cell.getNumericCellValue());
                        } else {
                            value = String.valueOf(HSSFDateUtil.getJavaDate(cell
                                    .getNumericCellValue()));
                        }
                        break;
                    case XSSFCell.CELL_TYPE_BOOLEAN:
                        System.out.println(i + "行" + j + " 列 is Boolean type");
                        value = cell.getBooleanCellValue();
                        break;
                    case XSSFCell.CELL_TYPE_BLANK:
                        System.out.println(i + "行" + j + " 列 is Blank type");
                        value = "";
                        break;
                    default:
                        System.out.println(i + "行" + j + " 列 is default type");
                        value = cell.toString();
                    }
                    System.out.println(i + "行" + j + "列value:"+value);
                    System.out.println();
                    if (value == null || "".equals(value)) {
                        continue;
                    }
                    linked.add(value);
                }
                list.add(linked);
            }
            return list;
        }
    
        /**
         * @Description: 判断是否是合并单元格
         * @param @param sheet
         * @param @param row 第几行
         * @param @param column 第几列
         * @param @return   
         * @return Map<String, Object>  
         * @throws
         * @author hougm
         * @date 2017-7-31
         */
        private static Map<String, Object> isMergedRegion2003(HSSFSheet sheet,int row ,int column) {   
           int sheetMergeCount = sheet.getNumMergedRegions();
           Map<String, Object> cellMap=new HashMap<String, Object>();
           cellMap.put("isMergedRegion", false);
           for (int i = 0; i < sheetMergeCount; i++) {   
                 CellRangeAddress range = sheet.getMergedRegion(i);   
                 int firstColumn = range.getFirstColumn(); 
                 int lastColumn = range.getLastColumn();   
                 int firstRow = range.getFirstRow();   
                 int lastRow = range.getLastRow();   
                 if(row >= firstRow && row <= lastRow){ 
                     if(column >= firstColumn && column <= lastColumn){ 
                         cellMap.put("isMergedRegion", true);
                         cellMap.put("cellRangeAddress", range);
                         return cellMap;  
                     } 
                 }
           } 
           return cellMap;  
         }
        
        /**
         * @Description: 判断是否是合并单元格
         * @param @param sheet
         * @param @param row 第几行
         * @param @param column 第几列
         * @param @return   
         * @return Map<String, Object>  
         * @throws
         * @author hougm
         * @date 2017-7-31
         */
        private static Map<String, Object> isMergedRegion2007(XSSFSheet sheet,int row ,int column) {   
           int sheetMergeCount = sheet.getNumMergedRegions();
           Map<String, Object> cellMap=new HashMap<String, Object>();
           cellMap.put("isMergedRegion", false);
           for (int i = 0; i < sheetMergeCount; i++) {   
                 CellRangeAddress range = sheet.getMergedRegion(i);   
                 int firstColumn = range.getFirstColumn(); 
                 int lastColumn = range.getLastColumn();   
                 int firstRow = range.getFirstRow();   
                 int lastRow = range.getLastRow();   
                 if(row >= firstRow && row <= lastRow){ 
                     if(column >= firstColumn && column <= lastColumn){ 
                         cellMap.put("isMergedRegion", true);
                         cellMap.put("cellRangeAddress", range);
                         return cellMap;  
                     } 
                 }
           } 
           return cellMap;  
         }
    }
  • 相关阅读:
    ASP.NET 缓存技术分析
    asp.net中两款文本编辑器NicEdit和Kindeditor
    VS2005,VS2008,VS2010将ASP.NET网站编译成一个DLL文件
    公共的Json操作C#类
    怎么把100多个EXCEL文件合并成一个
    C# ToString()方法一些特殊用法
    C# 将数据导出到Execl汇总
    ASP.NET MVC中在Action获取提交的表单数据方法总结
    vue实现锚点定位跳转(当前页面跳转,url不变)
    es6 去除小数点后,不四舍五入
  • 原文地址:https://www.cnblogs.com/zuoqun/p/7992448.html
Copyright © 2011-2022 走看看