2017-09-26 7 views
0

xlsx 파일이 있습니다. Java 6에서 api poi 3.17을 읽었습니다. 한 인스턴스에서 123456789011이라는 값을 가진 셀이 있습니다. 이것은 숫자가 CellTypeEnum 인 Java로 읽혀집니다. 내가 DataFormatter를 사용하는 경우이 같은 셀의 값을 얻을 수 있습니다 :Apache POI DataFormatter가 과학 표기법을 반환합니다.

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

문자열 값은 "1.234567 + 11"로 나온다. 셀에 "123456789011"이라는 실제 가치가 필요합니다. 어떻게해야합니까?

이미 Java에서 BigDecimal을 사용하여 String을 변환하려고했지만 "123456700000"이 반환됩니다. 이는 주어진 정보로 할 수있는 최선의 방법입니다. 실제 셀 객체에서 올바른 값을 가져와야 함을 의미합니다. 나는 또한 cell.getNumericCellValue()를 사용하여 시도했으나 원래 값을 처리하기에는 너무 작은 제한을 갖는 double을 반환하므로 검색의 다른 메소드와 동일한 문제가있는 "1.234567E11"으로 검색됩니다.

xlsx에 입력 된 원래 셀에서 문자열로 값을 가져 오는 방법이 있습니까? 원래 xlsx에 대한 권한이 없습니다.

감사합니다.

+1

왜 Cell.getNumericCellValue()를 사용하지 않으시겠습니까? 형식을 적용하지 않고 실제 값을 double 값으로 반환해야합니다. – centic

+0

그 질문에 포함되어 있습니다 – user3813942

+0

여기를 보시려면 https://stackoverflow.com/questions/16098046/how-to-print-double-value-without-scientific-notation-using-java – matrix

답변

0

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

나는이 일을 시도 : (내 시트에서 A1 셀에 숫자 123,456,789,011을 가지고, 숫자 등의 세포 유형으로)

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; 
    } 

희망이 도움이됩니다.

+0

이렇게 해답을 얻었습니다. 고맙습니다. – user3813942