2016-04-21 254 views
0

我發現了一個奇怪的錯誤,而試圖在java中讀通過Apache POI單元格的值:的Apache POI getStringCellValue()打印空

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

總是打印null,甚至指定缺少政策Row.CREATE_NULL_AS_BLANK後。我寫單元格的邏輯是:

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

當我在colNum = 13處寫入Cell時,String值對象爲null。我無法理清這個問題。

回答

0

Cell接口上的getStringCellValue()將返回""如果您的代碼按假定的方式工作(將該調用設置爲空白)。
col ID 13的值不可能不是null而是"null"

+0

沒有這是不可能的,因爲我沒有將值設置爲「空」在任何地方。它是空對象。 – Ashley

1

此行不會做你彷彿覺得它的作用:

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

實際上,這是在做

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

因此,如果沒有什麼在該單元格,它創建它作爲一個空空白的

然後,您嘗試做:

cell.getStringCellValue() 

這隻適用於String單元格,在缺失的情況下,您已經告訴POI爲您提供Blank新單元格!

如果你真的只想要一個單元格的字符串值,請使用DataFormatter.formatCellValue(Cell) - 返回包含格式的單元格的字符串表示。否則,請在嘗試獲取值之前檢查您的單元格的類型!