엑셀 서비스 제공을 위한 유틸 클래스에 버그가 있는 것 같습니다.
- 작성자 :
- 이*행
- 작성일 :
- 2014-08-27 15:53:50
- 조회수 :
- 1,315
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
엑셀 수식에 있는 셀에서 값 가져오는데 문제가 있는 것 같습니다.
수식 반환 값이 문자열 아니면 숫자여서 예외처리를 해야 할 것 같습니다.
----------------------------------------------------------------------------------------------------
egovframework.rte.fdl.excel-2.7.0.jar
egovframework.rte.fdl.excel.util
public static String getValue(HSSFCell cell) {
----------------------------------------------------------------------------------------------------
수식이 있으면 에러가 나는 것 같습니다.
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
log.debug("### HSSFCell.CELL_TYPE_FORMULA : "
+ HSSFCell.CELL_TYPE_FORMULA);
String stringValue = cell.getRichStringCellValue().getString();
String longValue = doubleToString(cell.getNumericCellValue());
result =
EgovStringUtil.isNumeric(longValue) ? longValue : stringValue;
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
----------------------------------------------------------------------------------------------------
아래와 같이 변경하는 것이 어떨까요?
String stringValue = null;
try {
stringValue = cell.getRichStringCellValue().getString();
} catch (Exception e) {
}
String longValue = null;
try {
longValue = doubleToString(cell.getNumericCellValue());
} catch (Exception e) {
}
String result = null;
if (stringValue != null) {
result = stringValue;
} else if (longValue != null) {
result = longValue;
} else {
result = cell.getCellFormula();
}
수식 반환 값이 문자열 아니면 숫자여서 예외처리를 해야 할 것 같습니다.
----------------------------------------------------------------------------------------------------
egovframework.rte.fdl.excel-2.7.0.jar
egovframework.rte.fdl.excel.util
public static String getValue(HSSFCell cell) {
----------------------------------------------------------------------------------------------------
수식이 있으면 에러가 나는 것 같습니다.
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
log.debug("### HSSFCell.CELL_TYPE_FORMULA : "
+ HSSFCell.CELL_TYPE_FORMULA);
String stringValue = cell.getRichStringCellValue().getString();
String longValue = doubleToString(cell.getNumericCellValue());
result =
EgovStringUtil.isNumeric(longValue) ? longValue : stringValue;
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
----------------------------------------------------------------------------------------------------
아래와 같이 변경하는 것이 어떨까요?
String stringValue = null;
try {
stringValue = cell.getRichStringCellValue().getString();
} catch (Exception e) {
}
String longValue = null;
try {
longValue = doubleToString(cell.getNumericCellValue());
} catch (Exception e) {
}
String result = null;
if (stringValue != null) {
result = stringValue;
} else if (longValue != null) {
result = longValue;
} else {
result = cell.getCellFormula();
}
A
안녕하세요. 이백행님.
우선 코드에 대한 개선을 직접 올려주셔서 감사합니다.
CELL_TYPE_FORMULA인 경우 getRichStringCellValue()가 Exception을 throw하도록 처리되고 있어서 문제가 발생한 것 같습니다.
해당 코드 부분은 올려주신 부분을 참조하여 차기 버전에 반영하도록 하겠습니다.
참조로 다음과 같은 형태의 코드로 검토 예정입니다.
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
LOGGER.debug("### Cell.CELL_TYPE_FORMULA : {}", Cell.CELL_TYPE_FORMULA);
if (cell.getCachedFormulaResultType() == Cell.CELL_TYPE_STRING) {
result = cell.getStringCellValue();
} else if (cell.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC) {
result = doubleToString(cell.getNumericCellValue());
}
그럼, 즐거운 하루되십시오.
감사합니다.
}
우선 코드에 대한 개선을 직접 올려주셔서 감사합니다.
CELL_TYPE_FORMULA인 경우 getRichStringCellValue()가 Exception을 throw하도록 처리되고 있어서 문제가 발생한 것 같습니다.
해당 코드 부분은 올려주신 부분을 참조하여 차기 버전에 반영하도록 하겠습니다.
참조로 다음과 같은 형태의 코드로 검토 예정입니다.
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
LOGGER.debug("### Cell.CELL_TYPE_FORMULA : {}", Cell.CELL_TYPE_FORMULA);
if (cell.getCachedFormulaResultType() == Cell.CELL_TYPE_STRING) {
result = cell.getStringCellValue();
} else if (cell.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC) {
result = doubleToString(cell.getNumericCellValue());
}
그럼, 즐거운 하루되십시오.
감사합니다.
}