jxl解析问题总结

来源:互联网 发布:js弹出自定义div窗口 编辑:程序博客网 时间:2024/05/22 21:08

在做jxl解析excel过程中出现了几个问题,这里总结下:

  1. 删除一行excel表格
    正常的workbook得到的对象是不能操作excel表格的修改的,只能在拿到数据才可以修改数据。但是,网上搜索有个方法是可以删除的,就是WritableWorkbook里有removRow(i)方法,但是我用writableworkbook操作,整个excel表格会变成空,所以,谨慎使用。
    其实这个道理和io流操作一样,用写文件就会覆盖以前的内容。
  2. 解析时间格式会有”;@”
    这个问题,我试了下,因为是英文的,所以会有这样的解析错误,比如同样是5点30分,中文格式:5:30,英文格式5:30,是不一样的,所以需要改变格式,代码如下:
private final static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");private static String formatDate(Cell cell, SimpleDateFormat sdf) {        String cellValue=null;          if (cell.getType() == CellType.DATE)           {               DateCell dc = (DateCell) cell;               Date date = dc.getDate();               TimeZone zone = TimeZone.getTimeZone("GMT");              //SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");              sdf.setTimeZone(zone);              cellValue = sdf.format(date);                                     } else{              cellValue = cell.getContents();                     }          return cellValue;    }
  1. 有时候行数不准确
    实际开发中,我们必须要通过获得excel的行和列数来解析他,但是我遇到了拿到行列不准确的情况,也就是:
int rows = sheet.getRows();int columns = sheet.getColumns();

但是我们可以通过得到实际的正行空的数量,然后减去空的行数来解决这个问题。

   protected static int getRealColumn(Sheet sheet,int rows,int columns){       int count = 0;       for(int i=0;i<columns;i++){           for(int j=1;j<rows;j++){               String context = sheet.getCell(i, j).getContents();               if(StringUtils.isNotBlank(context)){                   j = rows;                   continue;               }               if(j == rows){                   count++;               }           }       }       System.out.println("rows = "+rows+" colums = "+columns+" count = "+count);       return count;   }
  1. 得到单元格中的数字内容
    这个思路是用这则迭代:
    是从“ 电车司机2017年9月交路表(syx-003#)”里得到201709这样的信息
public static String getDate(Sheet sheet){           //获取时间           String dateContext = "";           String context = sheet.getCell(0, 0).getContents();           Pattern pattern = Pattern.compile("\\d+");           Matcher matcher = pattern.matcher(context);           while(matcher.find()){               String data = matcher.group();             //  int dataInt = Integer.valueOf(data);               if(data.length()<2){                   data = "0"+data;               }//             if(data.length()==3){//                 continue;//             }               dateContext+=data;           }           dateContext =dateContext.substring(0, 6);        return dateContext;    }   
原创粉丝点击