2013-10-16 8 views
9

Attualmente sto lavorando a un progetto che legge un file excel usando il POI di Apache.Ottieni il valore della cella come è stato presentato in excel

Il mio compito sembra essere semplice, ho solo bisogno di ottenere il valore della cella così come era visualizzato nel file excel. Sono consapevole di eseguire un'istruzione switch in base al tipo di cella di una cella. Ma se i dati sono qualcosa come

9,000.00

POI mi dà 9000.0 quando faccio getNumericCellValue(). Quando forzo la cella ad essere un tipo di stringa e lo faccio a getStringCellValue() mi dà quindi 9000. Quello di cui ho bisogno sono i dati come sono stati presentati in Excel.

Ho trovato alcuni post che dicono di usare la classe DataFormat ma, secondo la mia comprensione, richiede che il codice sia consapevole del formato della cella. Nel mio caso, non sono a conoscenza del formato che potrebbe avere la cella.

Quindi, come posso recuperare il valore della cella come è stato presentato in Excel?

risposta

16

Excel memorizza alcune cellule come stringhe, ma la maggior parte come numeri con regole di formattazione speciali applicati a loro. Quello che devi fare è avere queste regole di formattazione eseguite contro le celle numeriche, per produrre stringhe che assomigliano a quelle di Excel.

Fortunatamente, Apache POI ha una classe di fare proprio questo - DataFormatter

Tutto quello che devi fare è qualcosa di simile:

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); 

Non importa quale sia il tipo di cellula è, DataFormatter la formattazione il meglio che può per te, utilizzando le regole applicate in Excel

+0

Il suo funzionamento! Grazie. Voto superiore + risposta accettata. – Bnrdo

+0

ha funzionato per me! Grazie! – user3471194

0

Utilizzare il CellType è possibile controllare ogni cosa

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

// il CellValue è numerico

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

// il CellValue è una stringa

data è data anche come numerico, in quel momento verifica che la data cella sia data o meno usando dateUtil

if (DateUtil.isCellDateFormatted(cellData)) 

dopo è possibile convertire il CellValue in data

+1

Ho già fatto questo, il mio problema è, il formato originale dei dati non viene ripristinato. – Bnrdo

+0

Ho cercato di ottenere il valore numerico come String da getStringCellValue() ho ottenuto un'eccezione. per quello solo ho dato questo. È possibile ottenere String come numerico. – newuser

+0

Dai un'occhiata http://stackoverflow.com/questions/1072561/how-can-i-read-numeric-strings-in-excel-cells-as-string-not-numbers-with-apach – newuser

Problemi correlati