2016-07-05 2 views
1

을 얻을 수없는 공식이지만 :POI-XSSF : 세포 유형은, 내가 세포 유형을 검사하고 셀 유형이 공식 경우, 그럼 내가 이렇게 캐시 된 값을 얻기 위해 노력하고 있어요 내 코드에서 cachedResultType

else if(cell.getCellType() == XSSFCell.CELL_TYPE_FORMULA){ 
     System.out.println("formula result type:" +cell.getCachedFormulaResultType()); 
     switch(cell.getCachedFormulaResultType()){ 
      case XSSFCell.CELL_TYPE_NUMERIC: 
        ....  
        ....   
      break; 

그것은 일부 세포에 대한 잘 작동하지만 셀 중 하나에, 내가 불법 주 예외 얻을 :

java.lang.IllegalStateException: Only formula cells have cached results 

나는 오류의 원인을 찾을 수 없습니다 오전. 나는이 else ifcell.getCachedFormulaResult() 외부를 사용하지 않을하고, 심지어이 캐시 된 결과를 사용할 수없는 경우

+2

사용중인 아파치 POI 어떤 버전의 내부? 이 최신이 아닌 경우, 당신은 무엇을 업그레이드 발생하면? 우리는 엑셀 플러그인으로 나에게 사용할 수없는 공식에 대한 일부 타사 라이브러리를 사용하기 때문에 내가 계산을 트리거 할 필요가 없습니다 예외가 – Gagravarr

+2

또한 그 이유는, 전체 스택 트레이스를 추가하십시오 캐시 된 값을 읽었습니다. 어쨌든 고마워. – centic

답변

1

(같은 공식이있는) 위의 모든 셀 작동, 어쩌면 그것은 명시 적으로 계산을 실행하는 데 도움이 :

Workbook wb = ... 
Sheet sheet = wb.getSheetAt(0); 
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); 

// suppose your formula is in B3 
CellReference cellReference = new CellReference("B3"); 
Row row = sheet.getRow(cellReference.getRow()); 
Cell cell = row.getCell(cellReference.getCol()); 

CellValue cellValue = evaluator.evaluate(cell); 

는이 예처럼 뭔가를 할 수 try/catch(IllegalStateException)

+0

을 발생 위치를 정확히 볼 수 있도록 – gaurav5430