该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/**
* 获取单元格的值,如果为公式,则获取公式解析后的值(非公式本身)
*
* @param cell
* @return
*/
public static String getCellValue(Cell cell) {
String cellValue = "";
if (cell == null)
return cellValue;
int cType = cell.getCellType();
try {
switch (cType) {
// 这里会不会有问题?会不会返回null?
case Cell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
short dateType = cell.getCellStyle().getDataFormat();
String buildInFormat = HSSFDataFormat
.getBuiltinFormat(dateType);
if (HSSFDateUtil.isCellDateFormatted(cell)) {
cellValue = getCellDateValue(cell, buildInFormat);
} else {
// 此为XLS内存储的真实的值,XLS不是一个所见即所得的工具,如值为0.8125,如果设置单元格
// 为数值型,且小数位为2位,则见到的为0.81,而实际读取到的值仍为0.8125.此处添加对数值
// 型数据的格式化,以满足获取所见的数值所需;
// (实际上仍存在瑕疵,如设置的小数位为5位,但无法获取其数值类型,故无法取到正确的显示值)
cellValue = getCellNumericValue(cell, buildInFormat);
}
break;
case Cell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_FORMULA:
// 是公式,获取公式值
cellValue = getFormulaValue(cell);
break;
case Cell.CELL_TYPE_BOOLEAN:
cellValue = Boolean.toString(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_ERROR:
cellValue = Byte.toString(cell.getErrorCellValue());
break;
default:
cellValue = cell.getStringCellValue();
break;
}
} catch (Exception e) {
log.error(
new StringBuilder("读取单元格的值出现异常,SHEET:")
.append(cell.getSheet().getSheetName())
.append(",Row:").append(cell.getRowIndex() + 1)
.append(",Column:")
.append(cell.getColumnIndex() + 1).toString(), e);
}
if (cellValue != null) // 对单元格值取TRIM
cellValue = cellValue.trim();
return cellValue;
}
//不谢