2013-10-07 47 views
0

我有這樣的代碼:我得到的公式,而不是單元格內容

String fname = "C:/Users/slim/Desktop/xlsxFiles/plan.xlsx"; 
      InputStream inp = new FileInputStream(fname); 
      Workbook wb = new XSSFWorkbook(inp); 
      Sheet sheet = wb.getSheetAt(0); 

      for (Row row : sheet) { 
       System.out.println(row.getCell(0)); 
       System.out.println(row.getCell(11)); 
      } 

我面對這個問題似乎有點怪我,因爲這是我第一次處理POI。

cell 0的內容是一個日期,我完全沒有問題,但cell 11這個內容應該是一個數字是返回用於獲取內容的公式。下面是一個示例輸出:

31-Aug-2013 
L3/5 
30-Sep-2013 
L3*2/5 
31-Oct-2013 
L3*3/5 
30-Nov-2013 
L3*4/5 
31-Dec-2013 
L3 
31-Jan-2014 
P8 
28-Feb-2014 
P9 
31-Mar-2014 
P10 

等等...

我需要做的是顯示單元,而不是公式的實際內容。我確信我錯過了一些小東西,但作爲一個完整的初學者,我無法發現它。

+1

你需要[閱讀此](http://poi.apache.org/spreadsheet/eval.html) –

+1

Finf以下答案,必須幫助你。 http://stackoverflow.com/questions/17510112/how-to-read-cell-value-from-formula-cell-using-apache-poi – Tauseef

回答

1

小區的實際內容是式; Excel通常不會顯示它(相反,它顯示評估公式的結果)。

This document解釋如何計算公式,但往往,因爲Excel用公式一起保存最後計算出的值,這是沒有必要的。

所以getCell(11).getNumericCellValue()可能就足夠了。

注意,當與文本的單元格中使用此方法拋出異常。

+0

'java.lang.IllegalStateException:無法從文本單元格獲取數值有沒有辦法將其轉換? – Slim

+0

如果您遇到此錯誤,那麼您在沒有公式且沒有數字值的單元格上調用'.getNumericCellValue()'。我建議你問每個單元格的類型('getCellType()'),然後調用正確的方法讀取值。 –

+0

嘿它工作!現在我還有一個空值的問題,但我會發現它是如何工作的。非常感謝您的幫助! – Slim

1

這應該工作:

 for (Row row : sheet) { 
      System.out.println(row.getCell(0).getRichStringCellValue().getString()); 
      System.out.println(row.getCell(11).getRichStringCellValue().getString()); 
     } 
+0

java.lang.IllegalStateException:無法獲取文本值從數字公式單元格'有沒有一種方法來轉換它? – Slim

相關問題