programing

Apache POI 데이터 포맷터가 과학적 표기법을 반환합니다.

bestprogram 2023. 7. 1. 09:05

Apache POI 데이터 포맷터가 과학적 표기법을 반환합니다.

자바 6의 아파치 포이 3.17로 읽고 있는 xlsx 파일이 있습니다.한 예로 123456789011이라는 값을 가진 셀이 있습니다.이것은 Java로 숫자 셀 유형 열거형 셀로 읽힙니다.데이터 포맷터를 사용하여 다음과 같은 셀 값을 가져오는 경우:

DataFormatter formatter = new DataFormatter(Locale.US); String strVal = formatter.formatCellValue(cell);

String 값은 "1.234567+11"로 표시됩니다.셀의 실제 값인 "123456789011"이 필요합니다.제가 그걸 어떻게 얻을 수 있나요?

이미 Java에서 BigDecimal을 사용하여 String을 변환하려고 했지만 지정된 정보로 할 수 있는 최선의 값이기 때문에 "123456700000"이 반환됩니다. 즉, 실제 셀 개체에서 올바른 값을 가져와야 합니다.또한 cell.getNumericCellValue()를 사용하려고 했지만 원래 값을 처리하기에는 너무 작은 제한이 있는 이중을 반환하므로 다른 검색 방법과 동일한 문제가 있는 "1.234567E11"로 검색됩니다.

xlsx에 입력할 때 원본 Cell에서 String으로 값을 가져올 수 있는 방법이 있습니까?저는 원본 xlsx에 대한 권한이 없습니다.

감사해요.

BigDecimal의 toPlainString() 메서드를 사용합니다.과학적 표기법을 사용하여 해당 숫자 String 값으로 변환합니다.

저는 이것을 시도했습니다: (제 시트의 셀 A1에 있는 번호 123456789011을 가지고 있으며 셀 유형은 숫자입니다.)

Row row = sheet.getRow(0);
Object o = getCellValue(row.getCell(0));
System.out.println(new BigDecimal(o.toString()).toPlainString());

getCellValue 메서드는 셀을 읽는 일반적인 메서드입니다.

public Object getCellValue(Cell cell) {
        if (cell != null) {
            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                return cell.getStringCellValue();

            case Cell.CELL_TYPE_BOOLEAN:
                return cell.getBooleanCellValue();

            case Cell.CELL_TYPE_NUMERIC:
                return cell.getNumericCellValue();
            }
        }
        return null;
    }

이것이 도움이 되길 바랍니다!

언급URL : https://stackoverflow.com/questions/46431561/apache-poi-dataformatter-returns-scientific-notation