Чтение значения даты из ячейки excel в виде строки
Я использую библиотеку apache poi для чтения файла excel. Я застреваю во время чтения ячейки пароля. Если пользователь вводит дату в качестве пароля в ячейке пароля, то есть 16/05/2012. Я читаю это значение как "41045", а значение должно быть "16/05/2012". Это мой код:
cell = row.getCell(); // date in the cell password '16/05/2012'
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if(cellCount == TEMPLATE_PASSWORD) {// if cell is password
cell.setCellType(Cell.CELL_TYPE_STRING);
cellValue = cell.getRichStringCellValue().getString(); // value read is 41045 and not "16/05/2012"
}
break;
default:
}
может кто-нибудь помочь в этом?
Спасибо.
Ответы
Ответ 1
Класс, который вы ищете в POI, DataFormatter
Когда Excel записывает файл, некоторые ячейки хранятся в виде строковых строк, а другие хранятся в виде чисел (включая даты). Для последнего значение переменной с плавающей точкой, представляющее ячейку, сохраняется в файле, поэтому, когда вы запрашиваете POI для значения ячейки, что она на самом деле имеет.
Иногда, особенно при выполнении Text Extraction (но не всегда), вы хотите, чтобы значение ячейки выглядело так, как в Excel. Не всегда возможно получить это точно в String (например, не полный пробел), но класс DataFormatter поможет вам закрыть.
Также обратите внимание, что в Excel даты сохраняются как числа с плавающей запятой с ~ 1900, поэтому вы видите число, не являющееся датой. Используйте DataFormatter (или аналогичный), чтобы он отображался как дата
Ответ 2
Используйте приведенный ниже код, чтобы получить точный формат даты, так как u введено в листе excel.
DataFormatter df = new DataFormatter();
stringCellValue = df.formatCellValue(cell);
Ответ 3
Префикс значения ячейки с ', сохраняя его в xls, отображает его в ячейку строки. Итак, все, что вы читаете из этой ячейки, будет обрабатываться как строка и читать как есть.