2014-02-07 4 views
2

, когда я прочитал содержимое ячейки, например. если он находится в формате даты, он добавляет другое значение, например 12/31/2099 -> 46052 и 50,00 - 50 и 50,00% -> 0,5.Как читать точное содержимое ячейки файла excel в apache POI

Но я хочу получить точное строковое значение для каждой ячейки.

Мой код выглядит так:

cell.setCellType(Cell.CELL_TYPE_STRING); 
String str = cell.getStringCellValue(); 

ответ

4

Нет необходимости в явном форматировании, apache-poi обеспечивает DataFormatter класс как утилита для использования формата контента , как представляется, на отлично. Вы можете выбрать пользовательские форматы тоже, простой пример будет (ячейка ссылка на ваш XSSFCell объекта):

System.out.println(new DataFormatter().formatCellValue(cell)); 

Excel лист выглядит следующим образом:

enter image description here

Использование DataFormatter (СОП заявление выше) печатает:

50% 
$ 1,200 
12/21/14 

Где ваше обычное форматирование будет печатать:

0.5 
1200.0 
21-Dec-2014 
+0

Tx, это было именно то, что мне нужно. Не знал, что ячейка использует внутренне разные типы файлов – yonjans

+0

@yonjans your're welcome – PopoFibo

0

Я бы не попытаться изменить тип данных, в то время как я читаю.

Вместо этого, я хотел бы попытаться

  • получить тип клеток прежде всего
  • затем использовать необходимый Вам метод получения для каждого типа данных

Например:

// Let's say you have prepared a DecimalFormat yourNumberFormatter and a 
// DateFormat yourDateFormatter with the format that is appropiate to your 
// presentation 
Cell cell = ...; 
String value = null; 
switch (cell.getCellType()) { 
    case Cell.TYPE_NUMERIC: 
    // Date format 
    if (DateUtil.isCellDateFormatted(cell)) { 
     value = yourDateFormatter.format(cell.getDateCellValue()); 
    } 
    else { 
     value = yourNumberFormatter.format(cell.getNumericCellValue()); 
    } 
    break; 
    case Cell.TYPE_STRING: 
    value = cell.getStringCellValue(); 
    break; 
    // Etc. 
} 
+0

Я хотел обрабатывать все типы ячеек, такие как валюта, ssn и т. Д. Я думаю, что DateUtil предназначен только для обработки ячеек DateType – yonjans

+0

Да, вы правы. Проблема в том, что такие вещи, как «валюта», представляют собой комбинацию между цифровым форматом и конкретным стилем для ячейки excel; вам нужно будет отредактировать числовой регистр ввода, чтобы разделить каждый случай, который у вас есть, и произвести презентацию с номером вашего прочитанного –

Смежные вопросы