我使用 wrkBook.getCreationHelper()评估了所有公式.createFormulaEvaluator()。evaluateAll(); 当我尝试使用getCachedFormulaResultType()获取单元格类型时返回不正确的类型5.
注意:我正在尝试评估依赖的细胞公式 例如。单元格 E2 公式为 = TEXT(NOW()," hh:mm:ss"),单元格F2公式为 = TEXT(TIME (HOUR(VALUE(E2)),分钟(VALUE(E2))+ 2,SECOND(VALUE(E2))+ 2)" HH:MM:SS&#34)
这是我的getCellValue代码:
public String getCellValue(int cellType, org.apache.poi.ss.usermodel.Cell cell)
{
String value = "";
if (cell != null)
{
switch (cellType)
{
case Cell.CELL_TYPE_STRING:
value=
handleStringCase(cell.getRichStringCellValue().toString());
break;
case Cell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell))
{
Date date2 = cell.getDateCellValue();
String dateFmt = cell.getCellStyle().getDataFormatString();
value = new CellDateFormatter(dateFmt).format(date2);
try {
if(value.startsWith("[$") && value.endsWith(";@"))
{
value = value.split("]")[1];
value = value.split(";")[0];
}
else if(value.startsWith("[$") && !value.endsWith(";@"))
{
value = value.split("]")[1];
}
else if(!value.startsWith("[$") && value.endsWith(";@"))
{
value = value.split(";")[0];
}
} catch (Exception e) {
logger.error("Exception :", e);
}
}else
{
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
value = cell.getStringCellValue();
}
break;
case Cell.CELL_TYPE_BOOLEAN:
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
value = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BLANK:
value = "";
break;
case Cell.CELL_TYPE_FORMULA:
value = getCellValue(cell.getCachedFormulaResultType(), cell);
break;
case Cell.CELL_TYPE_ERROR:
System.out.println("ERROR : "+ cellType);
break;
default:
return value;
}
} else
{
return value;
}
return value;
}