Почему? Почему, почему, почему ты написал этот код для начала? Это просто неправильно на стольких уровнях, как, вероятно, каждый третий вопрос Apache POI на Stackoverflow :(О, и это explicitly advised against in the JavaDocs ....
У вас есть два варианта. Если вы хотите иметь полный контроль над чтение значений, затем следуют instructions in the Apache POI documentation on reading cell values, и писать код что-то вроде:
for (Row row : sheet1) {
for (Cell cell : row) {
CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
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();
}
}
}
с другой стороны, если вы просто хотите «дать мне ближайший строку вы можете к тому, что эта клетка выглядит как в Excel», то вам нужно используйте DataFormatter class, который предоставляет методы, которые читают правила формата Excel, применяемые к ячейке, а затем воссоздает (насколько это возможно) те, что в Java
Ваш код должен быть:
DataFormatter fmt = new DataFormatter();
String valueAsInExcel = fmt.formatCellValue(cell);
Это будет форматировать число, основанное на правилах форматирования, применяемые в Excel, так что должен вернуть его смотреть, как вы ожидаете
Наконец, даты в Excel хранятся в виде плавающей с 1900 по 1904 год, поэтому вы видите номер, который вы делаете в ячейке даты.
Я проверил переполнение стека, поэтому перестань быть высокомерным. Все, что я нашел, это то, как преобразовать его в формат даты, что я попробовал, и он вернул мне 00-00-000 00:00:00 Солнце ... что-то в этом роде. И мой вопрос был, почему я не могу получить нормальное значение String из ячейки. Я знаю, ячейка числовая, но если я установил тип ячейки в String, я ожидал бы получить дату как String ... –
FOI Я не использовал слово WHY. –
Изменение типа ячейки на строку! = Выбор значения форматирования ближайшего эквивалента к excel в виде строки, это совершенно разные вещи. – Gagravarr