您的位置:首页 > 其它

jxl解析问题总结

2017-09-20 13:58 232 查看
在做jxl解析excel过程中出现了几个问题,这里总结下:

删除一行excel表格

正常的workbook得到的对象是不能操作excel表格的修改的,只能在拿到数据才可以修改数据。但是,网上搜索有个方法是可以删除的,就是WritableWorkbook里有removRow(i)方法,但是我用writableworkbook操作,整个excel表格会变成空,所以,谨慎使用。

其实这个道理和io流操作一样,用写文件就会覆盖以前的内容。

解析时间格式会有”;@”

这个问题,我试了下,因为是英文的,所以会有这样的解析错误,比如同样是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;
}


有时候行数不准确

实际开发中,我们必须要通过获得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;
}


得到单元格中的数字内容

这个思路是用这则迭代:

是从“ 电车司机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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 对象 搜索 excel