2014-03-29 117 views
2

我正在從excel文件導入模塊。我必須閱讀並檢查這個文件,如果有什麼錯誤,我必須爲顏色的相應單元着色。然後我實現了以下方法單元格樣式的使用

public void fillCell(Workbook wb, Row row, int errorColumn){ 

    Cell cell = row.getCell(j); 
    CellStyle cs = wb.createCellStyle(); 
    cs.setFillForegroundColor((short) 10); 
    cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);   
    cell.setCellStyle(cs); 


} 

但我注意到這種方法改變了單元格的數據格式。例如,如果我使用數據值29/03/2014着色單元格,我得到彩色單元格,但其值現在是39536,數值1534000001629發生同樣的情況,在這種情況下,我也得到了彩色單元格,但如果我嘗試將值從1534000001629更改爲1534000001630,我得到1,534 + E12。

我該如何解決?

+0

單元格樣式包括格式化規則,所以你需要保存這些呢! – Gagravarr

+0

你能舉個例子嗎? – Skizzo

回答

1

的問題是,單元格樣式不僅控制單元格的顏色,他們還控制施加給它的格式。所以,發生什麼事情是你要替換格式爲#。#%的單元格樣式,而是應用一個例如紅色但沒有應用數字/日期格式規則的單元格樣式。

單元格樣式的工作簿範圍的,所以你不應該創建每單元一個,所以你應該讓你的邏輯有點像:

// Lookup from number format to the coloured version 
Map<String,CellStyle> styles = new Hashmap<String,CellStyle>(); 

// Method to make the cell a different colour 
public void fillCell(Workbook wb, Row row, int errorColumn){ 
    Cell cell = row.getCell(j); 

    // Try to find a coloured one for this data formatting 
    String formatStr = cell.getCellStyle().getDataFormatString(); 
    CellStyle cs = styles.get(formatStr); 
    if (cs == null) { 
     // Need to create a new coloured one 
     cs = wb.createCellStyle(); 
     cs.setFillForegroundColor((short) 10); 
     cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
     cs.setDataFormat(
      wb.getCreationHelper().createDataFormat().getFormat(formatStr)); 
     // Save this for later 
     styles.put(formatStr, cs); 
    } 

    // Apply the coloured form, with the format string 
    cell.setCellStyle(cs); 
} 
0

你既可以把它轉換爲字符串,如果你不需要做任何的數據處理就可以了以後像這樣:

cell.setCellType(CELL_TYPE_STRING); 

therwise您可以通過獲取從日期值做細胞進入Java.Util.Date對象,然後將其保存BACL = K:

Date date=cell.getDateCellValue(); 
//colour change 
cell.setValue(date); 

我沒有時間來測試這個權利,但現在讓我知道,如果它的工作原理,如果沒有,我會看起來更進去。

你可以得到更多的信息here

相關問題