2012-05-16 68 views
10

我使用的Apache POI庫來讀取Excel文件。我在閱讀密碼單元時被卡住了。如果用戶在密碼單元格中輸入日期,例如16/05/2012。我將此值讀作「41045」,而值應該是「16/05/2012」。這是我的代碼:閱讀日期值作爲字符串

cell = row.getCell(); // date in the cell password '16/05/2012' 
switch (cell.getCellType()) { 

case HSSFCell.CELL_TYPE_STRING: 
    cellValue = cell.getRichStringCellValue().getString(); 
    break; 
case HSSFCell.CELL_TYPE_NUMERIC: 
    if(cellCount == TEMPLATE_PASSWORD) {// if cell is password 
     cell.setCellType(Cell.CELL_TYPE_STRING); 
     cellValue = cell.getRichStringCellValue().getString(); // value read is 41045 and not "16/05/2012" 
    } 
    break; 
default: 
} 

任何人都可以幫忙嗎?

謝謝。

+0

看看這個線程,它幾乎與你的問題相同。 http://stackoverflow.com/questions/3148535/how-to-read-excel-cell-having-date-with-apache-poi – 2012-05-16 10:49:57

+0

@mashhur在你的鏈接,沒有按照我的要求沒有解決方案。 –

+0

我認爲你收到的是數字而不是字符串,因爲單元格的類型是數字。你確定數字類型對密碼單元格是否正確? – ImLearning

回答

14

你在POI尋找類是DataFormatter

當Excel寫到文件中,部分細胞被存儲爲文本字符串,而其它存儲爲數字(包括日期)。對於後者,代表單元的浮點值被存儲在文件中,所以當你向POI詢問實際上具有的單元值時。

雖然有時,特別是在做文字提取(但不總是)時,你想使單元格的值看起來就像是在Excel中一樣。它並不總是可以在String中完全得到(例如,非全空間填充),但DataFormatter類將使您關閉。

另請注意,在Excel中,自〜1900開始,日期將作爲浮點數存儲,這就是爲什麼您看到的不是日期的數字。使用DataFormatter(或類似)將它呈現爲一個日期

+0

好了,我查DataFormatter,我將格式化日期字符串即「41045」到「 16/05/2012" 。但是如果用戶輸入字符串爲「05/16/2012」呢?在這裏我會有相同的日期字符串「41045」,但根據邏輯它將轉換爲「16/05/2012」,而不是「05/16/2012」。或者我怎麼知道用戶輸入的格式? –

+0

當用戶將一個值輸入到單元格中時,將對其應用(自動或顯式)格式,該格式用於呈現它。 DataFormatter將根據任何格式呈現單元格。 – Gagravarr

4

前綴來單元格值「,而將其保存到XLS使得它成爲一個字符串細胞。因此,無論您從該單元格中讀取什麼,都將被視爲字符串並按原樣讀取。

+1

該解決方案需要用戶,誰進入的數據,要知道並記住此爲程序的緣故(他們可能甚至不知道) – Attila

5

使用下面的代碼得到確切的日期甲爲u在Excel工作表中輸入。

DataFormatter df = new DataFormatter(); 
stringCellValue = df.formatCellValue(cell); 
+0

這就是我所說的實際答案。謝謝! –