/ / Obtenga el valor de celda como se presentó en excel - java, apache-poi

Obtenga el valor de celda como se presentó en excel - java, apache-poi

Actualmente estoy trabajando en un proyecto que lee un archivo de Excel utilizando el PDI de Apache.

Mi tarea parece ser simple, solo necesito conseguirEl valor de la celda tal como se muestra en el archivo de Excel. Soy consciente de realizar una instrucción de cambio basada en el tipo de celda de una celda. Pero si los datos son algo así

9,000.00

POI me da 9000.0 Cuando lo hago getNumericCellValue(). Cuando fuerzo a la celda a ser un tipo de cadena y hago getStringCellValue() entonces me da 9000. Lo que necesito son los datos como se presentaron en Excel.

Encontré algún postdoctor para usar DataFormat clase pero según mi entendimiento, requiere que su código esté al tanto del formato que tiene la celda. En mi caso, no conozco el formato que podría tener la celda.

Entonces, ¿cómo puedo recuperar el valor de celda como se presentó en Excel?

Respuestas

18 para la respuesta № 1

Excel almacena algunas celdas como cadenas, pero la mayoría comoNúmeros con reglas de formato especiales aplicadas a ellos. Lo que deberá hacer es que esas reglas de formato se ejecuten en las celdas numéricas, para producir cadenas que se parecen a las de Excel.

Afortunadamente, Apache POI tiene una clase para hacer precisamente eso: DataFormatter

Todo lo que necesitas hacer es algo como:

 Workbook wb = WorkbookFactory.create(new File("myfile.xls"));
DataFormatter df = new DataFormatter();

Sheet s = wb.getSheetAt(0);
Row r1 = s.getRow(0);
Cell cA1 = r1.getCell(0);

String asItLooksInExcel = df.formatCellValue(cA1);

No importa cuál sea el tipo de celda, DataFormatter la formateará lo mejor que pueda, utilizando las reglas aplicadas en Excel


0 para la respuesta № 2

Utilizar el Tipo de célula puedes revisar cada cosa

if (cellValue.getCellType() == Cell.CELL_TYPE_NUMERIC)

// el valor de celda es Numérico

if (cellValue.getCellType() == Cell.CELL_TYPE_STRING)

// the cellValue es una cadena

La fecha también se da como numérica, en ese momento, compruebe que la celda dada sea fecha o no mediante el uso de fecha hasta

if (DateUtil.isCellDateFormatted(cellData))

después de que pueda convertir el valor de celda en la fecha