getCachedFormulaResultType()返回不正确的类型5 + Apache POI

时间:2017-08-30 09:02:47

标签: java excel apache excel-formula apache-poi

我使用 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;
}

0 个答案:

没有答案