2015-10-26 4 views
0

Я пытаюсь прочитать файл excel с помощью Apache Poi (v3.11/XSSFWorkbook). Я читаю конкретный лист {e.x. лист (0)}, который формируется разными макросами из примерно 15 листов из того же файла. Проблема в том, что я могу читать неформатированные данные String, но не могу читать форматированные данные, такие как валюта или%.Чтение валюты &% с помощью Java

В любом случае, я не контролирую рабочий лист excel. Я буду читать файл из сетевого сетевого пути.

XSSFWorkbook myWorkBook = null 
    XSSFSheet mySheet = null; 
    Row rowHeader = null; 
    Row rowData = null; 
    FileInputStream fis = new FileInputStream(
      new File(
        "inputfile.xlsx")); 
    myWorkBook = new XSSFWorkbook(fis); 
    mySheet = myWorkBook.getSheetAt(0); 
    rowHeader = mySheet.getRow(0); 
    rowData = mySheet.getRow(1); 



     for (Cell s : rowHeader) { 
       System.out.print("| "+s.getStringCellValue()); 
       System.out.println(" -->"+getCellValue(myWorkBook,rowData.getCell(s.getColumnIndex()))); 
    } 

    myWorkBook.close(); 
} 
// $#,##0.00 

private static String getCellValue(XSSFWorkbook wb, Cell cell) 
{ 
    XSSFCell x = (XSSFCell)cell; 
    return x.getRawValue(); 
} 
} 

У меня есть первенствует лист, как показано ниже

Name Amount Rate 
Name1 $1,500 75% 

Если я прочитал выше листа, используя этот код

Имя -> Name1

Сумма -> 1500 (примечание отсутствующий $ и,)

Оценить -> 74.99999998 (номер inacurate и missing% symbol)

+1

Рассмотрим с помощью 'BigDecimal' для хранения валютных ценностей. –

+0

вам нужен символ $,% со значениями. –

+0

макрос генерирует $ &%. Я могу увидеть эти значения, если я открою лист с помощью Ms-excel. И да, мне нужно $ &%. Цель состоит в том, чтобы получить значения ячеек, которые точно видны в ячейке. – avinandan012

ответ

0

Из документации,

getRawValue() возвратит сырье, лежащий в основе значения OOXML.

Вместо этого используйте getStringCellValue(), поскольку оно возвращает значение как строку и ничего не потеряно.

+0

Как я уже сказал, getStringCellValue() работает, если ячейка имеет тип «Текст». Для чисел (Тип: Валюта/Количество/Проценты) вы получите «java.lang.IllegalStateException: Невозможно получить текстовое значение из числовой ячейки». Даже если вы пишете логику с помощью getCellType(), чтобы избежать этого, вы теряете информацию о форматировании – avinandan012

1

Благодаря @Gagravarr

этом ниже код решен вопрос

private static String getCellValue(XSSFWorkbook wb, Cell cell) 
{ 
    DataFormatter formatter = new DataFormatter(); 
    String formattedCellValue = formatter.formatCellValue(cell); 
    return formattedCellValue; 
} 
Смежные вопросы