我一直在使用给出的示例代码来搜索工作表的内容:
Sheet sheet1 = wb.getSheetAt(0);
for (Row row : sheet1) {
for (Cell cell : row) {
CellReference cellRef = new CellReference(row.getRowNum(), cell.getCellNum());
System.out.print(cellRef.formatAsString());
System.out.print(" - ");
switch(cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if(DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
System.out.println();
}
}
}
但无法找到一种方法来正确比较从工作表中提取的日期与给定日期。我已经尝试过使用数据验证,并将日期格式化为字符串并包含其他条件语句但没有任何效果。
似乎是一个相对简单的问题,但是还没有必要修复呢?
任何帮助将不胜感激!
答案 0 :(得分:3)
Excel将日期存储为浮点小数,这显然与Java处理日期(long
值)的方式不同。
Apache POI包含一个帮助程序类,用于在Java和Excel之间进行日期转换:DateUtil
。这应该有帮助(如果我的问题正确的话)。
答案 1 :(得分:0)
我注意到如果您从表格中读取一个数字,即使您将其作为字符串读取,您也会得到十进制数字。
我做的是,我保留单元格中的所有数据都以下划线'_'开头,所以如果我尝试从任何单元格中读取数据作为字符串,我不会得到小数或任何东西。
String cellValue = cell.getValueAsString(); // assuming the cell value is "_01/01/2011"
cellValue = cellValue.substring(1);// this will ignore first character, the '_'
答案 2 :(得分:0)
使用DataFormatter类(Apache POI):
DataFormatter df = new DataFormatter();
String cellValue = df.formatCellValue(Cell cell);