2016-04-21 7 views
0

Ich bin einen seltsamen Fehler immer beim Versuch, die Zellenwert durch Apache POI in Java zu lesen:Apache POI getStringCellValue (Druck) null

System.out.println(row.getCell(13, Row.CREATE_NULL_AS_BLANK).getStringCellValue()) 

immer null Druck, auch nach der fehlenden Politik als Row.CREATE_NULL_AS_BLANK Angabe .My Schreiblogik der Zelle ist:

public void writeCell(String value, Sheet sheet, int rowNum, int colNum) 
{ 
    Row row = sheet.getRow(rowNum); 
    if (row == null) 
    { 
     row = sheet.createRow(rowNum); 
    } 
    Cell cell = row.createCell(colNum, Cell.CELL_TYPE_STRING); 
    if (value == null) 
    { 
     return; 
    } 
    cell.setCellValue(value); 
} 

Wenn ich to Cell ich schreibe an SpaltenNr = 13, der String-Wert Objekt null ist. Ich kann dieses Problem nicht beheben.

Antwort

0

Die getStringCellValue() auf der Cell Schnittstelle würde "" zurückgeben, wenn Ihr Code arbeitete als angenommen (Einstellung der Aufruf leer).
Ist es nicht möglich, dass der Wert für Spalte 13 nicht null sondern "null" ist?

+0

Nein, das ist nicht möglich, da ich den Wert nirgendwo auf Null setze. Es ist ein Null-Objekt. – Ashley

1

Diese Linie nicht tut, was Sie scheinen zu glauben, es tut:

System.out.println(row.getCell(13, Row.CREATE_NULL_AS_BLANK).getStringCellValue()) 

Tatsächlich tun das ist

Cell cell = row.getCell(13); 
if (cell == null) { cell = row.createCell(13, Cell.CELL_TYPE_BLANK); } 

Also, wenn nichts in dieser Zelle ist, es schafft als leerer Rohling ein

Dann versuchen Sie es zu tun:

cell.getStringCellValue() 

Dies funktioniert nur für String Zellen, und in dem fehlenden Fall haben Sie POI gesagt, Ihnen eine Blank neue Zelle zu geben!

Wenn Sie wirklich nur einen String-Wert einer Zelle wünschen, verwenden Sie DataFormatter.formatCellValue(Cell) - das eine String-Repräsentation Ihrer Zelle einschließlich Formatierung zurückgibt. Andernfalls überprüfen Sie den Typ Ihrer Zelle, bevor Sie versuchen, den Wert abzurufen!