最近使用poi解析excel遇到了很多问题,由于是第一次使用,遇到了很多坑。
上传的时候:
poi对于excel时候,对于office2003和office2007的解析不太一样,使用不同的方式解析,因此需要在页面做版本校验或者后台设置不同版本的处理方式,poi中HSSFWorkbook,XSSFWorkbook都实现了Workbook接口,HSSFWorkbook针对的2003的版本,XSSFWorkbook针对的是2007的版本,在解析excel的时候要注意,不然会抛异常。
解析excel的时候:
关于格式的问题:
我们经常会读一些数,比如手机号,如果按照数字读取需要注意指定格式(DecimalFormat df = new DecimalFormat("#.#########"))来处理读取数据含有小数位的问题
另外在读取单元格的时候最好判断单元格类型,这里列出部分格式判断:
public static String getCellValue(XSSFCell cell) {
String cellValue = "";
DecimalFormat df = new DecimalFormat("#.#########");
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString().trim();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
cellValue = df.format(cell.getNumericCellValue()).toString();
break;
default:
cellValue = "";
}
return cellValue;
}
关于excel原来有数据,但是删除数据后格式仍旧保留导致的读取时候仍然读到该行导致报空指针异常问题:
因为我读取的excel只有一列,所以我直接先判断row是否为空,为空则认为该行没有数据,不读取单元格内容
关于导出问题:
excel一般导出这里不做介绍,一般按照正常格式就可以,这里想说一下如果导出的数据了比较大的时候,建议使用poi3.8以上版本中的SXSSFWorkbook
之前导出10W数据后台报内存溢出,改用SXSSFWorkbook后没有出现该情况。具体不做分析,刚入行不久,还在研究阶段。会继续研究和更新。这里只是将自己遇到的问题总结一下。