下面的单元格中包含数字/字符串值的打印语句之间有什么区别?//尝试从excel单元格打印值
Cell cell = row.getCell(0);
System.out.println(cell);
System.out.println(cell.getStringCellValue());
System.out.println(cell.getNumericCellValue());
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
,而不管单元格的类型如何。