下面的打印语句中的单元格包含数字/字符串值的区别是什么?

问题描述 投票:0回答:1

下面的单元格中包含数字/字符串值的打印语句之间有什么区别?//尝试从excel单元格打印值

    Cell cell = row.getCell(0);
    System.out.println(cell);
    System.out.println(cell.getStringCellValue());
    System.out.println(cell.getNumericCellValue());
java apache-poi xssf
1个回答
0
投票

Cell cell = row.getCell(0);


System.out.println(cell);

这将显示cell.toString()返回的内容。例如HSSFCell.toString

public String toString() {
    switch (getCellTypeEnum()) {
        case BLANK:
            return "";
        case BOOLEAN:
            return getBooleanCellValue()?"TRUE":"FALSE";
        case ERROR:
            return ErrorEval.getText((( BoolErrRecord ) _record).getErrorValue());
        case FORMULA:
            return getCellFormula();
        case NUMERIC:
            //TODO apply the dataformat for this cell
            if (DateUtil.isCellDateFormatted(this)) {
                SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", LocaleUtil.getUserLocale());
                sdf.setTimeZone(LocaleUtil.getUserTimeZone());
                return sdf.format(getDateCellValue());
            }
            return  String.valueOf(getNumericCellValue());
        case STRING:
            return getStringCellValue();
        default:
            return "Unknown Cell Type: " + getCellType();
    }
}

System.out.println(cell.getStringCellValue());

这仅在单元格包含文本时有效。否则,它将引发异常。参见Cell.getStringCellValue


System.out.println(cell.getNumericCellValue());

仅当单元格包含数字内容(数字或日期)时,此选项才有效。否则,它将引发异常。参见Cell.getNumericCellValue


更好的方式是使用DataFormatter

DataFormatter formatter = new DataFormatter();
...
Cell cell = row.getCell(0);
String cellContent = formatter.formatCellValue(cell);
System.out.println(cellContent);

这适用于所有类型的单元格内容,因为DataFormatter.formatCellValue返回单元格的格式值作为String,而不管单元格的类型如何。

© www.soinside.com 2019 - 2024. All rights reserved.