2017-04-04 85 views
1

晚上好! 我在Apache poi v。3.14中遇到了一些麻煩,當我用Libreoffice或Excel打開呈現的xlsx時,樣式未正確應用。Apache POI背景顏色風格似乎不起作用

我有這樣的代碼:爲鎖定

class... { 

private XSSFCellStyle doubleLockStyle; 
/** 
    * Create default cell style. 
    * 
    * @param myWorkBook 
    * @return The cell style. 
    */ 
    private XSSFCellStyle createCell(XSSFWorkbook myWorkBook, boolean locked) { 
     XSSFCellStyle cs = myWorkBook.createCellStyle(); 
     cs.setAlignment(HorizontalAlignment.CENTER); 
     if (locked) { 
      cs.setFillBackgroundColor(LOCKED_COLOR); //rgb from awt colors 
      cs.setFillPattern(FillPatternType.SOLID_FOREGROUND); 
      cs.setLocked(true); 
     } else { 
      cs.setLocked(false); 
     } 
     return cs; 
    } 

    /** 
    * Prepare cell styles. 
    * 
    * @param myWorkBook 
    */ 
    private void initStyles(XSSFWorkbook myWorkBook) { 
    ... 
     short df = myWorkBook.createDataFormat().getFormat("0.00"); 
     doubleLockStyle = createCell(myWorkBook, true); 
     doubleLockStyle.setDataFormat(df); 
    ... 
    } 
    private void writeSheet(XSSFWorkbook myWorkBook, CalendarValueType type, Date startDate, Date endDate) { 
    ... 
    cell.setCellStyle(doubleLockStyle); 
    ... 
    } 
} 

卡的設置。 輸出不顯示背景顏色,也不鎖定單元格。 我找不出什麼問題。我也試着看看它是否是一個知道的錯誤,但事實並非如此。 任何人都有同樣的問題? 如果我將背景填充圖案更改爲斜線,但單元格會鎖定,但背景在Excel和Libre辦公室之間並不正確。 謝謝!

回答

5

背景顏色的問題是顏色有點不直觀。單元格有三種顏色,一種用於字體,另一種用於填充。填充圖案具有前景色和背景色。填充就是你所說的單元背景,並且可以有兩種顏色模式。當您使用實心填充:

cs.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

使用的唯一顏色是填充前景色,您可以使用設置:

cs.setFillForegroundColor(LOCKED_COLOR); 

您使用的填充背景色使用固體時,這是不可見填充圖案。

要鎖定的單元格工作,你必須啓用工作表保護通過:

Sheet.protectSheet(password) 

您必須設置一個密碼,如果密碼是null然後保護被禁用。您可以通過以下方式刪除密碼:

Sheet.setSheetPassword(null, null);