您的位置:首页 > 其它

POI导入Excel 解析各种格式单元格公共方法整理

2017-11-30 15:46 1266 查看

(可以解析文本、日期、数值、公式单元格、布尔、空值)

1、解析数值型保留两位小数,日期格式为yyyy-mm-dd以及公式型单元格
/**
* 获取cell中的值
* @param cell
* @return
*/
private String getCellValue(HSSFCell cell) {
if (cell != null) {
String value = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
DecimalFormat df = new DecimalFormat("#.##");
if (HSSFDateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
// 如果是date类型则 ,获取该cell的date值
//value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else { // 纯数字
value = df.format(cell.getNumericCellValue());
}
return value;
case HSSFCell.CELL_TYPE_STRING: // 字符串型
value = cell.getRichStringCellValue().toString();
return value;
case HSSFCell.CELL_TYPE_BOOLEAN: // 布尔
value = "" + cell.getBooleanCellValue();
return value;
case HSSFCell.CELL_TYPE_BLANK: // 空值
value = "";
case HSSFCell.CELL_TYPE_ERROR: // 故障
value = "";
return value;
case HSSFCell.CELL_TYPE_FORMULA:
//读公式计算值
/*value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue().toString();
}
return value;*/
HSSFWorkbook wb = cell.getSheet().getWorkbook();
HSSFCreationHelper crateHelper = wb.getCreationHelper();
HSSFFormulaEvaluator evaluator = crateHelper.createFormulaEvaluator();
value = getCellValue(evaluator.evaluateInCell(cell));
return value;
default:
value = cell.getRichStringCellValue().toString();
return value;
}
}
return "";
}

2、解析数值型单元格,excel单元格中什么精度就保留什么精度;日期类型必须为yyyy-mm-dd,无论是日期格式还是文本格式。可以解析公式型单元格。/**
* 获取cell中的值
* @param cell
* @return
*/
private String getCellValue(XSSFCell cell) {
if (cell != null) {
String value = "";
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_NUMERIC: // 数值型
//DecimalFormat df = new DecimalFormat("#.################");
if (DateUtil.isCellDateFormatted(cell)) {
//判断是否yyyy-mm-dd的格式
if(178==cell.getCellStyle().getDataFormat()){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
value = sdf.format(DateUtil.getJavaDate(cell.getNumericCellValue()));
}else{
//String str = cell.getCellStyle().getDataFormatString();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
value = sdf.format(DateUtil.getJavaDate(cell.getNumericCellValue()));
}
} else { // 纯数字
//value = df.format(cell.getNumericCellValue());
//此处不保留小数点,而是excel写多少就是多少
cell.setCellType(XSSFCell.CELL_TYPE_STRING);//无条件转为文本,迫不得已
value = cell.getRichStringCellValue().toString();
}
return value;
case XSSFCell.CELL_TYPE_STRING: // 字符串型
value = cell.getRichStringCellValue().toString();
return value;
case XSSFCell.CELL_TYPE_BOOLEAN: // 布尔
value = "" + cell.getBooleanCellValue();
return value;
case XSSFCell.CELL_TYPE_BLANK: // 空值
value = "";
case XSSFCell.CELL_TYPE_ERROR: // 故障
value = "";
return value;
case XSSFCell.CELL_TYPE_FORMULA:
//读公式计算值
/*value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue().toString();
}
return value;*/
XSSFWorkbook wb = cell.getSheet().getWorkbook();
XSSFCreationHelper crateHelper = wb.getCreationHelper();
XSSFFormulaEvaluator evaluator = crateHelper.createFormulaEvaluator();
value = getCellValue(evaluator.evaluateInCell(cell));
return value;
default:
value = cell.getRichStringCellValue().toString();
return value;
}
}
return "";
}
欢迎指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐