繁体   English   中英

Apache POI DataFormatter返回科学记数法

[英]Apache POI DataFormatter Returns Scientific Notation

我有一个xlsx文件,我正在阅读Java 6中的apache poi 3.17。在一个实例中,我有一个值为123456789011的单元格。这被读入java作为NUMERIC CellTypeEnum Cell。 当我使用DataFormatter获取单元格的值时,如下所示:

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

字符串值为“1.234567 + 11”。 我需要单元格中的实际值“123456789011”。 我怎么能得到它?

我已经尝试在Java中使用BigDecimal转换字符串,但返回“123456700000”,因为这是给定信息的最佳效果; 意思是我需要从实际的单元格对象中获取正确的值。 我也尝试使用cell.getNumericCellValue()但是它返回一个double,它的限制太小而无法处理原始值,因此它被检索为“1.234567E11”,它与其他检索方法具有相同的问题。

有没有办法从原始Cell中获取值作为字符串,因为它是在xlsx中输入的? 我对原来的xlsx没有任何威力。

谢谢。

使用BigDecimal的toPlainString()方法。 它采用科学记数法并将其转换为相应的数字字符串值。

我尝试这样做:(我的表单中的单元格A1的编号为123456789011,单元格类型为NUMERIC)

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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM