1、解决POI在读取文件名时不能读取名字中含有标点符号“.”的解决方案。
String fileSuffix =myfile.getOriginalFilename().substring(myfile.getOriginalFilename().lastIndexOf(".")); //获取文件的后缀名.xls
String filePrefix = myfile.getOriginalFilename().substring(0,myfile.getOriginalFilename().lastIndexOf(".")); //获取文件的
2、解决POI能够兼容07以下的Excel格式和07以上的Excel格式。
Workbook wb= null;
FormulaEvaluator formulaEvaluator = null;
InputStream is = new FileInputStream(file);
//判断excel文件的版本,2007以上,以下的处理方式不一致
if (file.getName().endsWith("xlsx")) {
wb = new XSSFWorkbook(is);
formulaEvaluator = newXSSFFormulaEvaluator((XSSFWorkbook) wb);
}
else {
wb = new HSSFWorkbook(is);
formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) wb);
}
3、解决POI读取最大行数时将带格式空行读取或存在空行,导致批量导入失败的问题
Row row = sheet2.getRow(a);
//可以跳过空行去读取数据,解决末尾的带格式空行导致的的无法插入成功问题
if(a>=1){
if(row==null){continue;}
else if(StringUtils.isEmpty(getValue(row.getCell(0)))&&StringUti
ls.isEmpty(getValue(row.getCell(1)))){
trace.info("存在为空的列");
continue;
}
}
4、解决POI无法同时读取带多种格式的单元格表格
统一调用该方法读取单元格值
private String getValue(Cell cell){
if (cell == null) {
return"";
}
elseif(cell.getCellType() == cell.CELL_TYPE_BOOLEAN){
return String.valueOf(cell.getBooleanCellValue());
}elseif(cell.getCellType() == cell.CELL_TYPE_NUMERIC){
Stringvalue="";
//检验是否为日期格式的数值类型
if(DateUtil.isCellDateFormatted(cell)){
value=df.format(cell.getDateCellValue());
}
else{
value=new DecimalFormat("0").format(cell.getNumericCellValue());
}
return value;
//String.valueOf(cell.getNumericCellValue());
}else{
return String.valueOf(cell.getStringCellValue());
}
}