2012-06-19 242 views
1

我使用POI 3.8版本並嘗試讀取Excel表格(XLS)中單元格的背景顏色。理想情況下,我想將這個單元格樣式複製到另一個表單中。當我做了一個cloneFrom(..)方法時,它不會將正確的顏色複製到目標工作表。POI讀取單元格背景顏色

當我試圖單獨讀取單元格的背景顏色時,我沒有得到正確的RGB值。如果我能得到正確的RGB值,我可以創建一個自定義調色板並將其設置爲目標工作表的單元格。

是否有從單元格中讀取背景顏色的正確方法?

我曾嘗試以下

cell.getCellStyle().getFillBackgroundColor() 
cell.getCellStyle().getFillBackgroundColorColor().getTriplet() 

,上面一行是給我的159/200/222 RGB值,但給我的51/204/204不正確的值。

有人可以請幫助。我已經檢查了這個論壇的所有可能的答案,仍然無法得到我想要的。

回答

3

問題是HSSF使用調色板(基本上是一個顏色數組)來定義其RGB值。所以背景顏色實際上是調色板的索引。下面是一些代碼來獲取細胞的背景顏色的實際RGB值:

CellStyle style = cell.getCellStyle(); 
    short colorIdx = style.getFillForegroundColor(); 
    HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette(); 
    HSSFColor color = palette.getColor(colorIdx); 
    short [] triplet = color.getTriplet(); 
    // triplet will contain the actual rgb values 

在你的電子表格輸出,你要自定義顏色添加到調色板。如果輸出調色板中有空白空間,則可以使用HSSFPalette.addColor。否則,您將不得不使用HSSFPalette.setColorAtIndex替換未使用的現有顏色。一旦添加了自定義顏色,就可以使用CellStyle.setFillBackgroundColor來設置單元格的背景顏色,並傳入剛剛創建的自定義顏色的索引。

如果您可以使用XSSF(xlsx)文件而不是HSSF(xls)文件,則無需使用調色板。您可以使用實際的rgb值。

+0

我試過這段代碼,它給了我64的HSSFColor.AUTOMATIC.index值,我得到的三元組是白色的[0,0,0]。當我將它作爲前景顏色嘗試時,我得到了相同的三元組[51,204,204],這是錯誤的。任何幫助,這是非常讚賞 – lsiva

+0

我試過這個代碼之前,我發佈它,它確實爲我工作。如果你想去我的個人資料,我的電子郵件地址在那裏,你可以給我發電子郵件xls文件,並確定你需要背景顏色的單元格。我會寫一些代碼,告訴你如何得到它。 –

+0

肯定會這麼做... – lsiva

相關問題