2013-05-09 105 views
0

我有一個excel中包含一些值文件,其中來自Excel中的值:如何格式化用java

**Status Code** **Method Name** 
400     createRequest 
401     testRequest 
402     mdm 
403     fileUpload 

和下面的代碼讀取和打印數據[後期以後,我要對他們的HashMap ]

package com.poc.excelfun; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.Iterator; 

import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 

public class ReadExcelData { 
    public static void main(String[] args) { 
     try { 

      FileInputStream file = new FileInputStream(new File("attachment_status.xls")); 

      //Get the workbook instance for XLS file 
      HSSFWorkbook workbook = new HSSFWorkbook(file); 

      //Get first sheet from the workbook 
      HSSFSheet sheet = workbook.getSheetAt(0); 

      //Iterate through each rows from first sheet 
      Iterator<Row> rowIterator = sheet.iterator(); 
      while(rowIterator.hasNext()) { 
       Row row = rowIterator.next(); 

       //For each row, iterate through each columns 
       Iterator<Cell> cellIterator = row.cellIterator(); 
       while(cellIterator.hasNext()) { 

        Cell cell = cellIterator.next(); 

        switch(cell.getCellType()) { 
         case Cell.CELL_TYPE_BOOLEAN: 
          System.out.print(cell.getBooleanCellValue() + "\t\t"); 
          break; 
         case Cell.CELL_TYPE_NUMERIC: 
          System.out.print(cell.getNumericCellValue() + "\t\t"); 
          break; 
         case Cell.CELL_TYPE_STRING: 
          System.out.print(cell.getStringCellValue() + "\t\t"); 
          break; 
        } 
       } 
       System.out.println(""); 
      } 
      file.close(); 
      /* 
      * The following code to create a new work book with the value fetched from the given work book 
      * FileOutputStream out = 
       new FileOutputStream(new File("attachment_status_new.xls")); 
      workbook.write(out); 
      out.close();*/ 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

,但上面的代碼返回如下:

Status Code  Method Name  
400.0  createRequest  
401.0  testRequest  
402.0  mdm  
403.0  fileUpload 

如果在凌晨放出來的狀態代碼自帶.0但我只想得到400不適用.0

如何做到這一點。

我已經使用poi Excel的操作。

問候 安託

+1

你可以使用字符串或正則表達式來格式化輸出。或者嘗試將數字轉換爲整數 – Kuchi 2013-05-09 08:37:13

回答

1

cell.getNumericCellValue()收益雙vaule丟在int小數點將被忽略。

+0

感謝您的+1,在一段時間後將其標記爲答案,因爲它不允許我接受。 – 2013-05-09 08:41:27

+0

我再次有一個問題,如何將它們放在密鑰對值中,例如方法名稱的「方法名稱和相應的狀態代碼」? – 2013-05-09 08:43:05

+0

@Anto:您最後的評論與原始問題無關。如果不同的問題沒有混合到一個問題中,其他人可以更好地使用該網站。請參閱常見問題解答。所以請制定另一個問題。 – 2013-05-09 08:45:27

1

Excel存儲的文件格式爲浮點值,這就是爲什麼POI會給你回一個雙對數字小區,這就是真的有幾乎所有的數字。

雖然你可以只強制轉換成int類型,即只希望具體到一個案件,而不是一般的。我認爲你可能想要的(雖然從你的問題來看不太清楚)是在Java中獲得一個包含數字的字符串,就像它在Excel中看起來那樣?所以你的單元格包含400.0和整數格式規則會返回字符串「400」。

如果是這樣,你想要做同樣的事情as in my answer here。引用:

你想要做的是使用DataFormatter class。您將這個單元格傳遞給它,並儘可能返回一個包含Excel將顯示給該單元格的字符串的字符串。如果你將它傳遞給一個字符串單元格,你會得到字符串。如果您將格式化規則應用於數字單元格,它將根據它們格式化數字並將字符串返回。

對於你的情況,我會假設數字單元應用了整數格式規則。如果您要求DataFormatter格式化這些單元格,它會返回一個包含整數字符串的字符串。