excel表格_excel函数公式大全_execl从入门到精通
Java处理EXCEL要注意的几点问题2024-04-25 16:56:54
平时开发,鉴于Excel的便利性,一些人习惯于使用Excel进行数据的批量导入导出,这时我们不免要用到Java与Excel的api,下面我们就实际开发中遇到的问题做详细介绍。
Excel的Java调用注意事项1.Excel版本的问题
我们知道,Excel作为微软的一款应用软件,可以有低版本的xls,也会有高版本的xlsx。但是,这两种格式在java调用excel的api库的使用上是不同的。
对于xls:
InputStream is = new FileInputStream(file);
Workbook workbook = new HSSFWorkbook(is);
对于xlsx
InputStream is = new FileInputStream(file);
Workbook workbook =new XSSFWorkbook(is);
2.对于空行的处理
int countRow=sheet.getPhysicalNumberOfRows();这句话可以获取Excel的行数,但是这里值得一提的是,这里获取到的行是指激活行,即便没填写任何数据,只要该行被激活,就算。因此使用这句话获取的数值一般会比我们实际的行数多一些。这里我们就要用到行数判空,除去一些空行。
private int CheckRowNull(Row row){
if(row==null){ return 999999999;}
int num = 0;
Iterator<Cell> cellItr =row.iterator();
while(cellItr.hasNext()){
Cell c =cellItr.next();
if(c.getCellType() ==HSSFCell.CELL_TYPE_BLANK){ num++; }
}
return num;
}
下面我们拿这个返回值跟我们的列数做比较,因为有多少列我们是已知的。下面的27就是指列数,如果空列数比27要大,这么这一行肯定是空行。
int mColEmpty=CheckRowNull(row);
if(mColEmpty>=27){continue;}
3.Excel日期格式的判定
一般而言,Excel的日期是按数字格式来获取的,也就是Cell.CELL_TYPE_NUMERIC,然后再通过row.getCell(列标).getDateCellValue()获取日期,这里有个问题,就是如果Excel的单元格格式处理的不好,容易得到一个数字,然后再通过getDateCellValue获取时就得到一个1990年的时间,显然这是不对的。这里我们可以把该行定义为String类型,即row.getCell(列标).setCellType(Cell.CELL_TYPE_STRING);然后再获取row.getCell(列标).getStringCellValue(),如果要存储的列为Date类型,再进行String与Date的转化。
标签: java写excel