2013-10-16 2 views
9

Ich arbeite gerade an einem Projekt, das eine Excel-Datei mit Apache POI liest.Erhalte den Zellenwert so, wie er in Excel dargestellt wurde

Meine Aufgabe scheint einfach zu sein, ich brauche nur den Zellenwert, wie er in der Excel-Datei angezeigt wurde. Ich bin mir bewusst, eine switch-Anweisung basierend auf dem Zelltyp einer Zelle durchzuführen. Aber wenn die Daten etwas ist wie

9,000.00

POI gibt mir 9000.0 wenn ich getNumericCellValue() tun. Wenn ich die Zelle dazu zwinge, ein String-Typ zu sein und getStringCellValue() mache, dann gibt es mir 9000. Was ich brauche, sind die Daten, wie sie in Excel präsentiert wurden.

Ich fand etwas Nacherzählen zu verwenden DataFormat Klasse, aber nach meinem Verständnis, erfordert es Ihren Code, das Format zu kennen, das die Zelle hat. In meinem Fall ist mir das Format der Zelle nicht bekannt.

Also, wie kann ich den Zellwert abrufen, wie es in Excel dargestellt wurde?

Antwort

16

Excel speichert einige Zellen als Strings, aber die meisten als Zahlen mit speziellen Formatierungsregeln auf sie angewendet. Sie müssen diese Formatierungsregeln für die numerischen Zellen ausführen, um Zeichenfolgen zu erzeugen, die aussehen wie in Excel.

Zum Glück Apache POI hat eine Klasse genau das zu tun - DataFormatter

Alles, was Sie tun müssen, ist so etwas wie:

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

Es spielt keine Rolle, was der Zelltyp ist, wird DataFormatter formatieren es so gut es kann für Sie, mit den Regeln in Excel angewendet

+0

Es funktioniert! Danke. Upvote + Antwort angenommen. – Bnrdo

+0

Arbeitete für mich! Vielen Dank! – user3471194

0

Verwenden Sie die CellType Sie alles überprüfen

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

// die Cellvalue ist Numeric

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

// die Cellvalue ein String ist

Datum auch als numerische gegeben ist, Überprüfen Sie zu diesem Zeitpunkt, ob das angegebene Datum der Zelle entspricht oder nicht, indem Sie dateUtil

verwenden
if (DateUtil.isCellDateFormatted(cellData)) 

, nachdem Sie das Cellvalue in das Datum umwandeln kann

+1

Ich tat dies bereits, mein Problem ist, das ursprüngliche Format der Daten wird nicht wiederhergestellt. – Bnrdo

+0

Ich habe versucht, den numerischen Wert als String von getStringCellValue() Ich bekam eine Ausnahme. Dafür habe ich nur das gegeben. Ist dies möglich, um den String als numerisch zu erhalten? – newuser

+0

Werfen Sie einen Blick http://stackoverflow.com/questions/1072561/how-can-i-read-numeric-strings-in-excel-cells-as-string-not-numbers-with-apach – newuser