Вопрос по java, apache-poi – Значение ячейки Excel с числовым форматом и категорией в качестве валюты не извлекается через Apache POI 3.6

0

Привет, я анализирую ячейку в Excel с определенным форматом, для которого строка формата данных имеет вид & quot; $ & quot; #, ## 0 Я хочу получить значение в этой ячейке, но не могу этого сделать, может кто-нибудь помочь?

Currently with this code i am getting value as blank , but in excel the value is for e.g. $40.
 for (Row row : sheet) 
        {     
                Cell dataCell = row.getCell(colIndex); 

                if(dataCell!=null )
                {
                   if( row.getRowNum()==5)
                   {

                       System.out.println("Cell Value is::"+dataCell.toString());
                   }


                }

            }

Ваш Ответ

3   ответа
0

м

private String getCellValue(Cell cell) {
    if (cell == null) {
        return null;
    }
    if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
        return cell.getStringCellValue();
    } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
        return cell.getNumericCellValue() + "";
    } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
        return cell.getBooleanCellValue() + "";
    }else if(cell.getCellType() == Cell.CELL_TYPE_BLANK){
        return cell.getStringCellValue();
    }else if(cell.getCellType() == Cell.CELL_TYPE_ERROR){
        return cell.getErrorCellValue() + "";
    } 
    else {
        return null;
    }
}
1

кажется, хотите, чтобы строка была волшебно отформатирована, чтобы выглядела так же, как в Excel, без какой-либо кодировки с вашей стороны. можете сделать это в POI, но это не обычный вариант использования. Люди обычно хотят получать значения в виде чисел, логических значений и т. Д. И обрабатывать их самостоятельно.

Класс, который вы ищете,DataFormatter, Ваш код будет что-то вроде

 DataFormatter fmt = new DataFormatter();
 for (Row r : sheet) {
    for (Cell c : r) {
       CellReference cr = new CellRefence(c);
       System.out.println("Cell " + cr.formatAsString() + " is " + 
                          fmt.formatCellValue(c) );
    }
 }
0

а не просто делать это "строковым типом".

Пример с HSSF:

HSSFCell cell = poiFilaActual.getCell(intColActual);
if (cell != null) {
    if (HSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
        return cell.getRichStringCellValue().toString();
    }  else if (HSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
        return new String( (cell.getBooleanCellValue() == true ? "true" : "false") );
    } else if (HSSFCell.CELL_TYPE_BLANK == cell.getCellType()) {
        return "";
    } else if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
        if(HSSFDateUtil.isCellDateFormatted(cell)){
            return ( new SimpleDateFormat("dd/MM/yyyy").format(cell.getDateCellValue()) );
        }else{
            return new BigDecimal(cell.getNumericCellValue()).toString();
        }
    }
}

Похожие вопросы